summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2009-08-31 14:26:33 +0000
committerIulian Dragos <jaguarul@gmail.com>2009-08-31 14:26:33 +0000
commit09ba9ab65e4e10ce05f099e4bf28a16341dac70c (patch)
treebb49b08977a5d4c4ca01a5566bc4082363915a3b /src
parent158e5db28b9a95f54002302f4393b26aa6106e68 (diff)
downloadscala-09ba9ab65e4e10ce05f099e4bf28a16341dac70c.tar.gz
scala-09ba9ab65e4e10ce05f099e4bf28a16341dac70c.tar.bz2
scala-09ba9ab65e4e10ce05f099e4bf28a16341dac70c.zip
Fixed #1539.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala4
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala33
2 files changed, 17 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 192d3a2bb7..b4a2ca9853 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -708,7 +708,7 @@ trait Symbols {
assert(infos.prev eq null, this.name)
val tp = infos.info
//if (settings.debug.value) System.out.println("completing " + this.rawname + tp.getClass());//debug
- lock {
+ lock {
setInfo(ErrorType)
throw CyclicReference(this, tp)
}
@@ -717,7 +717,7 @@ trait Symbols {
phase = phaseOf(infos.validFrom)
tp.complete(this)
// if (settings.debug.value && runId(validTo) == currentRunId) System.out.println("completed " + this/* + ":" + info*/);//DEBUG
- unlock()
+ unlock()
} finally {
phase = current
}
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
index a2e7a4a2a4..5aafda4430 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala
@@ -424,7 +424,7 @@ abstract class ClassfileParser {
val staticInfo = ClassInfoType(List(), staticDefs, statics)
if (!isScala && !isScalaRaw) {
- //println("Entering inner classes for " + clazz)
+// println("Entering inner classes for " + clazz)
enterOwnInnerClasses
}
val curbp = in.bp
@@ -991,21 +991,28 @@ abstract class ClassfileParser {
*/
def classSymbol(externalName: Name): Symbol = {
/** Return the symbol of `innerName', having the given `externalName'. */
- def innerSymbol(externalName: Name, innerName: Name, static: Boolean): Symbol =
+ def innerSymbol(externalName: Name, innerName: Name, static: Boolean): Symbol = {
+ def getMember(sym: Symbol, name: Name): Symbol =
+ if (static)
+ if (sym == clazz) staticDefs.lookup(name)
+ else sym.linkedModuleOfClass.info.member(name)
+ else
+ if (sym == clazz) instanceDefs.lookup(name)
+ else sym.info.member(name)
+
innerClasses.get(externalName) match {
case Some(entry) =>
val sym = classSymbol(entry.outerName)
- if (static) {
- val s = atPhase(currentRun.typerPhase)(sym.linkedModuleOfClass.info.member(innerName.toTypeName))
- assert(s ne NoSymbol, sym + "." + innerName + " linkedModule: " + sym.linkedModuleOfClass + sym.linkedModuleOfClass.info.members)
- s
- } else
- sym.info.member(innerName.toTypeName)
+ val s = atPhase(currentRun.typerPhase)(getMember(sym, innerName.toTypeName))
+ assert(s ne NoSymbol, sym + "." + innerName + " linkedModule: " + sym.linkedModuleOfClass + sym.linkedModuleOfClass.info.members)
+ s
+
case None =>
val cls = classNameToSymbol(externalName)
cls
//if (static) cls.linkedClassOfModule else cls
}
+ }
get(externalName) match {
case Some(entry) =>
@@ -1025,16 +1032,6 @@ abstract class ClassfileParser {
}
}
- /** A lazy type that represents a Java inner class. */
- class LazyInnerClassType(innerEntry: InnerClassEntry) extends LazyType {
- override def complete(sym: Symbol) {
-// println("completing " + sym)
- val clazz = innerClasses.classSymbol(innerEntry.externalName)
-// println("found symbol: " + clazz)
- sym.setInfo(clazz.info)
- }
- }
-
def skipAttributes() {
val attrCount = in.nextChar
for (i <- 0 until attrCount) {