aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Applications.scala
diff options
context:
space:
mode:
authorNicolas Stucki <nicolas.stucki@gmail.com>2016-08-24 13:38:40 +0200
committerNicolas Stucki <nicolas.stucki@gmail.com>2016-09-05 11:52:37 +0200
commitbd54fd04dada033836d2b9113e40b9485a52522a (patch)
tree8bf563d777ea2bdd17cf3578e30e9df9b3681e75 /src/dotty/tools/dotc/typer/Applications.scala
parenta0e7adb070ee9c73c0cca081196198296cbd63ab (diff)
downloaddotty-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.scala19
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.