summaryrefslogtreecommitdiff
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
parentb38f2a1df3ec5ae646575a5078aaeb649a18a413 (diff)
downloadscala-5e501977f8ef72efda884d6190eeb532703d4275.tar.gz
scala-5e501977f8ef72efda884d6190eeb532703d4275.tar.bz2
scala-5e501977f8ef72efda884d6190eeb532703d4275.zip
more tweaks to symbol importing; not done yet
-rw-r--r--src/compiler/scala/reflect/internal/Importers.scala19
-rw-r--r--test/disabled/pos/code.scala6
2 files changed, 17 insertions, 8 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)
diff --git a/test/disabled/pos/code.scala b/test/disabled/pos/code.scala
index 57292c32df..e9e458ac10 100644
--- a/test/disabled/pos/code.scala
+++ b/test/disabled/pos/code.scala
@@ -7,10 +7,10 @@ object Test extends App {
fun
}
val code = foo(List(2))
- val tree = foo(List(2)code.tree.asInstanceOf[scala.reflect.runtime.Mirror.Tree]
- val targetType = code.manifest.tpe
+ val tree = code.tree.asInstanceOf[scala.reflect.runtime.Mirror.Tree]
+ val targetType = code.manifest.tpe.asInstanceOf[scala.reflect.runtime.Mirror.Type]
val reporter = new StoreReporter
- val toolbox = new ToolBox(reporter)
+ val toolbox = new ToolBox(reporter, args mkString " ")
val ttree = toolbox.typeCheck(tree, targetType)
if (reporter.infos.nonEmpty) {
reporter.infos foreach println