diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala | 3 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Types.scala | 2 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 9 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala index e12b6f1f21..4e2527bc3e 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala @@ -449,6 +449,9 @@ trait TypeKinds { self: ICodes => REFERENCE(sym) } + case ExistentialType(tparams, t) => + toTypeKind(t) + //case WildcardType => // bq: useful hack when wildcard types come here // REFERENCE(definitions.ObjectClass) diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala index 17cf219994..ae04027c5f 100644 --- a/src/compiler/scala/tools/nsc/symtab/Types.scala +++ b/src/compiler/scala/tools/nsc/symtab/Types.scala @@ -4187,7 +4187,7 @@ A type's typeSymbol should never be inspected directly. */ def addMember(thistp: Type, tp: Type, sym: Symbol) { assert(sym != NoSymbol) - if (settings.debug.value) log("add member " + sym)//debug + if (settings.debug.value) log("add member " + sym+":"+tp+" to "+thistp) if (!(thistp specializes sym)) { if (sym.isTerm) for (alt <- tp.nonPrivateDecl(sym.name).alternatives) diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 6696a5cf7b..ca898d4c62 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -746,6 +746,15 @@ trait Typers { self: Analyzer => assert((mode & HKmode) == 0) //@M instantiate(tree, mode, pt) } else if (tree.tpe <:< pt) { + def isStructuralType(tpe: Type) = tpe match { + case RefinedType(ps, decls) => + decls.toList exists (x => x.isTerm && x.allOverriddenSymbols.isEmpty) + case _ => + false + } + if (isStructuralType(pt) && tree.tpe.typeSymbol == ArrayClass) { + println("need to insert box for "+tree) + } tree } else { if ((mode & PATTERNmode) != 0) { |