summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-09-22 15:52:17 +0000
committerMartin Odersky <odersky@gmail.com>2011-09-22 15:52:17 +0000
commit5e501977f8ef72efda884d6190eeb532703d4275 (patch)
tree9fe6076c1e4658f021ed52cebb7350e13d8049c4 /src
parentb38f2a1df3ec5ae646575a5078aaeb649a18a413 (diff)
downloadscala-5e501977f8ef72efda884d6190eeb532703d4275.tar.gz
scala-5e501977f8ef72efda884d6190eeb532703d4275.tar.bz2
scala-5e501977f8ef72efda884d6190eeb532703d4275.zip
more tweaks to symbol importing; not done yet
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/reflect/internal/Importers.scala19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/compiler/scala/reflect/internal/Importers.scala b/src/compiler/scala/reflect/internal/Importers.scala
index 34c1cd6cf5..47a9a8f8a6 100644
--- a/src/compiler/scala/reflect/internal/Importers.scala
+++ b/src/compiler/scala/reflect/internal/Importers.scala
@@ -63,7 +63,7 @@ trait Importers { self: SymbolTable =>
new TypeSymbol(myowner, mypos, myname.toTypeName)
}
symMap(sym) = mysym
- mysym setFlag sym.flags
+ mysym setFlag sym.flags | Flags.LOCKED
mysym setInfo {
val mytypeParams = sym.typeParams map importSymbol
new LazyPolyType(mytypeParams) {
@@ -77,9 +77,10 @@ trait Importers { self: SymbolTable =>
}
}
}
+ mysym resetFlag Flags.LOCKED
} // end doImport
- if (myowner.isClass && !myowner.isRefinementClass && sym.owner.info.decl(sym.name).exists) {
+ if (myowner.isClass && !myowner.isRefinementClass && !(myowner hasFlag Flags.LOCKED) && sym.owner.info.decl(sym.name).exists) {
// symbol is in class scope, try to find equivalent one in local scope
if (sym.isOverloaded)
myowner.newOverloaded(myowner.thisType, sym.alternatives map importSymbol)
@@ -93,18 +94,26 @@ trait Importers { self: SymbolTable =>
} else {
existing filter (!_.isMethod)
}
- assert(!existing.isOverloaded)
+ assert(!existing.isOverloaded,
+ "import failure: cannot determine unique overloaded method alternative from\n "+
+ (existing.alternatives map (_.defString) mkString "\n")+"\n that matches "+sym+":"+sym.tpe)
}
if (existing.exists) existing
else {
val mysym = doImport
+ assert(myowner.info.decls.lookup(myname) == NoSymbol, myname+" "+myowner.info.decl(myname).exists)
myowner.info.decls enter mysym
mysym
}
}
- } else if (sym.isTypeParameter && sym.paramPos >= 0)
+ } else if (sym.isTypeParameter && sym.paramPos >= 0 && !(myowner hasFlag Flags.LOCKED)) {
+ assert(myowner.typeParams.length > sym.paramPos,
+ "import failure: cannot determine parameter "+sym+" (#"+sym.paramPos+") in "+
+ myowner+typeParamsString(myowner.rawInfo)+"\n original symbol was: "+
+ sym.owner+from.typeParamsString(sym.owner.info))
+ println(myowner.rawInfo)
myowner.typeParams(sym.paramPos)
- else
+ } else
doImport
}
symMap getOrElseUpdate (sym, importOrRelink)