diff options
author | Nicolas Stucki <nicolas.stucki@gmail.com> | 2016-08-24 13:38:40 +0200 |
---|---|---|
committer | Nicolas Stucki <nicolas.stucki@gmail.com> | 2016-09-05 11:52:37 +0200 |
commit | bd54fd04dada033836d2b9113e40b9485a52522a (patch) | |
tree | 8bf563d777ea2bdd17cf3578e30e9df9b3681e75 /src/dotty/tools/dotc/typer/Applications.scala | |
parent | a0e7adb070ee9c73c0cca081196198296cbd63ab (diff) | |
download | dotty-bd54fd04dada033836d2b9113e40b9485a52522a.tar.gz dotty-bd54fd04dada033836d2b9113e40b9485a52522a.tar.bz2 dotty-bd54fd04dada033836d2b9113e40b9485a52522a.zip |
Fix #1468: Add type parameter support for scala.Dynamic
Diffstat (limited to 'src/dotty/tools/dotc/typer/Applications.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Applications.scala | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/typer/Applications.scala b/src/dotty/tools/dotc/typer/Applications.scala index 099105de3..318f2f8ff 100644 --- a/src/dotty/tools/dotc/typer/Applications.scala +++ b/src/dotty/tools/dotc/typer/Applications.scala @@ -593,8 +593,10 @@ trait Applications extends Compatibility { self: Typer with Dynamic => case ErrorType => tree.withType(ErrorType) case TryDynamicCallType => tree match { - case tree @ Apply(Select(qual, name), args) if !isDynamicMethod(name) => - typedDynamicApply(qual, name, args, pt)(tree) + case Apply(Select(qual, name), args) if !isDynamicMethod(name) => + typedDynamicApply(qual, name, None, args, pt)(tree) + case Apply(TypeApply(Select(qual, name), targs), args) if !isDynamicMethod(name) => + typedDynamicApply(qual, name, Some(targs), args, pt)(tree) case _ => handleUnexpectedFunType(tree, fun1) } @@ -679,7 +681,18 @@ trait Applications extends Compatibility { self: Typer with Dynamic => } case _ => } - assignType(cpy.TypeApply(tree)(typedFn, typedArgs), typedFn, typedArgs) + if (typedFn.tpe eq TryDynamicCallType) { + (pt, typedFn) match { + case (_: FunProto, _)=> + tree.withType(TryDynamicCallType) + case (_, Select(qual, name)) => + typedDynamicSelect(qual, name, Some(typedArgs), pt) + case _ => + tree.withType(TryDynamicCallType) + } + } else { + assignType(cpy.TypeApply(tree)(typedFn, typedArgs), typedFn, typedArgs) + } } /** Rewrite `new Array[T](....)` if T is an unbounded generic to calls to newGenericArray. |