summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-02-06 15:45:31 +0000
committerMartin Odersky <odersky@gmail.com>2008-02-06 15:45:31 +0000
commit51e901a8c395eb2d08ff592c41c22acec7f543c8 (patch)
treeb5362c403a7ff275c23525efb2b11be8d60e1e7e /src
parent02c5a32843007fc4e6d9ddeab26fcf669c375d8e (diff)
downloadscala-51e901a8c395eb2d08ff592c41c22acec7f543c8.tar.gz
scala-51e901a8c395eb2d08ff592c41c22acec7f543c8.tar.bz2
scala-51e901a8c395eb2d08ff592c41c22acec7f543c8.zip
fixed #412, prepared for structural array problem.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/TypeKinds.scala3
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala9
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) {