diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-10 17:15:20 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-10 18:50:59 +0100 |
commit | 65639176ce59fd64cbecd90bf5680e64e471938f (patch) | |
tree | 2b7ebeebaa8b54bb228e6c571b8536fe4d5809bc /src/dotty/tools/dotc/core/classfile/ClassfileParser.scala | |
parent | 9a624b9249024eec4e165b47e22fe3f029a9ae81 (diff) | |
download | dotty-65639176ce59fd64cbecd90bf5680e64e471938f.tar.gz dotty-65639176ce59fd64cbecd90bf5680e64e471938f.tar.bz2 dotty-65639176ce59fd64cbecd90bf5680e64e471938f.zip |
Add second field to SeqLiteral
The field keeps track of the element type. This is necessary
because JavaSeqLiteral is nonvariant and the elements might
be empty, so we cannot always compute the type from the
element types.
Diffstat (limited to 'src/dotty/tools/dotc/core/classfile/ClassfileParser.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/classfile/ClassfileParser.scala | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala b/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala index 9ea24324b..25558a79a 100644 --- a/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala +++ b/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala @@ -438,7 +438,14 @@ class ClassfileParser( case None => hasError = true } if (hasError) None - else if (skip) None else Some(JavaSeqLiteral(arr.toList)) + else if (skip) None + else { + val elems = arr.toList + val elemType = + if (elems.isEmpty) defn.ObjectType + else ctx.typeComparer.lub(elems.tpes).widen + Some(JavaSeqLiteral(elems, TypeTree(elemType))) + } case ANNOTATION_TAG => parseAnnotation(index, skip) map (_.tree) } |