From 7bfdac0b73c28109b5d3130783feaca4a7c06100 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 23 Sep 2011 14:45:04 +0000 Subject: Now correctly handles moduleclasses in Importers --- src/compiler/scala/reflect/internal/Importers.scala | 8 +++++--- src/compiler/scala/reflect/runtime/ToolBoxes.scala | 4 +++- test/disabled/pos/code.scala | 10 +++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/compiler/scala/reflect/internal/Importers.scala b/src/compiler/scala/reflect/internal/Importers.scala index 47a9a8f8a6..440b5aa509 100644 --- a/src/compiler/scala/reflect/internal/Importers.scala +++ b/src/compiler/scala/reflect/internal/Importers.scala @@ -80,7 +80,9 @@ trait Importers { self: SymbolTable => mysym resetFlag Flags.LOCKED } // end doImport - if (myowner.isClass && !myowner.isRefinementClass && !(myowner hasFlag Flags.LOCKED) && sym.owner.info.decl(sym.name).exists) { + if (sym.isModuleClass) { + importSymbol(sym.sourceModule).moduleClass + } else 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) @@ -98,10 +100,10 @@ trait Importers { self: SymbolTable => "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 + if (existing != NoSymbol) existing else { val mysym = doImport - assert(myowner.info.decls.lookup(myname) == NoSymbol, myname+" "+myowner.info.decl(myname).exists) + assert(myowner.info.decls.lookup(myname) == NoSymbol, myname+" "+myowner.info.decl(myname)+" "+existing) myowner.info.decls enter mysym mysym } diff --git a/src/compiler/scala/reflect/runtime/ToolBoxes.scala b/src/compiler/scala/reflect/runtime/ToolBoxes.scala index 8b7242e6b4..90b5aba27d 100644 --- a/src/compiler/scala/reflect/runtime/ToolBoxes.scala +++ b/src/compiler/scala/reflect/runtime/ToolBoxes.scala @@ -24,7 +24,9 @@ trait ToolBoxes extends { self: Universe => lazy val exporter = importer.reverse def typeCheck(tree: Tree, expectedType: Type = WildcardType): Tree = { - new compiler.Run + println("typing "+tree+", pt = "+expectedType) + val run = new compiler.Run + compiler.phase = run.refchecksPhase val ctree: compiler.Tree = importer.importTree(tree) val pt: compiler.Type = importer.importType(expectedType) val ttree: compiler.Tree = compiler.typer.typed(ctree, compiler.analyzer.EXPRmode, pt) diff --git a/test/disabled/pos/code.scala b/test/disabled/pos/code.scala index e9e458ac10..8355c51e06 100644 --- a/test/disabled/pos/code.scala +++ b/test/disabled/pos/code.scala @@ -1,5 +1,6 @@ import reflect.runtime.Mirror.ToolBox import scala.tools.nsc.reporters._ +import scala.tools.nsc.Settings object Test extends App { def foo[T](ys: List[T]) = { @@ -9,14 +10,9 @@ object Test extends App { val code = foo(List(2)) 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 reporter = new ConsoleReporter(new Settings) val toolbox = new ToolBox(reporter, args mkString " ") val ttree = toolbox.typeCheck(tree, targetType) - if (reporter.infos.nonEmpty) { - reporter.infos foreach println - println("compilaton failed") - } else { - println("result = "+ttree) - } + println("result = "+ttree) } -- cgit v1.2.3