summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMiles Sabin <miles@milessabin.com>2010-02-09 10:15:16 +0000
committerMiles Sabin <miles@milessabin.com>2010-02-09 10:15:16 +0000
commit1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d (patch)
tree367454c46ffb8a4be3cfb536bea97be7646df507 /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent68bcaee6c1c23e8dbf319e6dd71710b7da4f5d2d (diff)
downloadscala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.tar.gz
scala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.tar.bz2
scala-1b99b4b148b04d0eafd6bd3fb55309c29f60eb2d.zip
Compiler part of fix for #2767: provide hooks t...
Compiler part of fix for #2767: provide hooks to allow the presentation compiler to add sources to the run to resolve top-level symbols which cannot be found via the Java naming convention. Review by odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index d2cb896cbf..a2c0616889 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -3494,6 +3494,11 @@ trait Typers { self: Analyzer =>
val qual1 = adaptToName(qual, name)
if (qual1 ne qual) return typed(treeCopy.Select(tree, qual1, name), mode, pt)
}
+
+ if (!reallyExists(sym) && currentRun.compileSourceFor(qual, name)) {
+ return typedSelect(qual, name)
+ }
+
if (!reallyExists(sym)) {
if (settings.debug.value) Console.err.println("qual = "+qual+":"+qual.tpe+"\nSymbol="+qual.tpe.termSymbol+"\nsymbol-info = "+qual.tpe.termSymbol.info+"\nscope-id = "+qual.tpe.termSymbol.info.decls.hashCode()+"\nmembers = "+qual.tpe.members+"\nname = "+name+"\nfound = "+sym+"\nowner = "+context.enclClass.owner)
if (!qual.tpe.widen.isErroneous) {
@@ -3657,7 +3662,9 @@ trait Typers { self: Analyzer =>
if (!(shortenImports && qual0.symbol.isPackage)) // optimization: don't write out package prefixes
qual = atPos(tree.pos.focusStart)(resetPos(qual0.duplicate))
pre = qual.tpe
- } else {
+ } else if (currentRun.compileSourceFor(context.asInstanceOf[analyzer.Context], name))
+ typedIdent(name)
+ else {
if (settings.debug.value) {
log(context.imports)//debug
}