diff options
author | Martin Odersky <odersky@gmail.com> | 2016-04-07 23:48:17 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-04-07 23:48:24 +0200 |
commit | 20175a01baf6dc3129f72c16f205832901098956 (patch) | |
tree | 5e06af09f9d668b247f6379676d5757c6489561e /src/dotty/tools/dotc/core/tasty | |
parent | 56b948c332993014e13c4c3e192b3573f9c46462 (diff) | |
download | dotty-20175a01baf6dc3129f72c16f205832901098956.tar.gz dotty-20175a01baf6dc3129f72c16f205832901098956.tar.bz2 dotty-20175a01baf6dc3129f72c16f205832901098956.zip |
Fix unpickling of Java SeqLiterals
Two problems were fixed:
- isJava needs to look at function symbol, not its type (references
to Java methods get normal MethodTypes not JavMethodTypes)
- we also need to handle the case where the repeated argument is
wrspped in a type ascription.
Diffstat (limited to 'src/dotty/tools/dotc/core/tasty')
-rw-r--r-- | src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala index d7f33c75c..ad6ddf7fe 100644 --- a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala +++ b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala @@ -807,9 +807,10 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) { tpd.Super(qual, mixName, ctx.mode.is(Mode.InSuperCall), mixClass) case APPLY => val fn = readTerm() - val isJava = fn.tpe.isInstanceOf[JavaMethodType] + val isJava = fn.symbol.is(JavaDefined) def readArg() = readTerm() match { - case SeqLiteral(elems, elemtpt) if isJava => JavaSeqLiteral(elems, elemtpt) + case SeqLiteral(elems, elemtpt) if isJava => + JavaSeqLiteral(elems, elemtpt) case arg => arg } tpd.Apply(fn, until(end)(readArg())) @@ -818,7 +819,14 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) { case PAIR => Pair(readTerm(), readTerm()) case TYPED => - Typed(readTerm(), readTpt()) + val expr = readTerm() + val tpt = readTpt() + val expr1 = expr match { + case SeqLiteral(elems, elemtpt) if tpt.tpe.isRef(defn.ArrayClass) => + JavaSeqLiteral(elems, elemtpt) + case expr => expr + } + Typed(expr1, tpt) case NAMEDARG => NamedArg(readName(), readTerm()) case ASSIGN => |