Skip to content

Commit 121bd60

Browse files
committed
Revert "Fixing inliner visibility issue."
This reverts commit 2820770. Last minute change had unintended consequences.
1 parent 2820770 commit 121bd60

File tree

5 files changed

+76
-80
lines changed

5 files changed

+76
-80
lines changed

src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -439,58 +439,62 @@ abstract class ClassfileParser {
439439
// println("found: " + sym)
440440
sym
441441
}
442-
443-
protected def lookupClass(name: Name) = {
444-
val sym = name match {
445-
case fulltpnme.RuntimeNothing => definitions.NothingClass
446-
case fulltpnme.RuntimeNull => definitions.NullClass
447-
case _ =>
448-
if (innerClasses contains name) // check inner classes
449-
innerClasses.classSymbol(innerClasses(name).externalName)
450-
else if (name containsChar '.') // qualified name
451-
definitions.getClassIfDefined(name)
452-
else // might be in the empty package
453-
definitions.getMember(definitions.EmptyPackageClass, name.toTypeName)
454-
}
455-
456-
sym orElse loadClassSymbol(name)
457-
}
458442

459-
protected def loadClassSymbol(name: Name): Symbol = {
460-
val file = global.classPath findSourceFile ("" +name) getOrElse {
461-
warning("Class " + name + " not found - continuing with a stub.")
462-
return NoSymbol.newClass(name.toTypeName)
463-
}
464-
val completer = new global.loaders.ClassfileLoader(file)
465-
var owner: Symbol = definitions.RootClass
466-
var sym: Symbol = NoSymbol
467-
var ss: Name = null
468-
var start = 0
469-
var end = name indexOf '.'
470-
471-
while (end > 0) {
472-
ss = name.subName(start, end)
473-
sym = owner.info.decls lookup ss
474-
if (sym == NoSymbol) {
475-
sym = owner.newPackage(ss) setInfo completer
476-
sym.moduleClass setInfo completer
477-
owner.info.decls enter sym
443+
/** Return the class symbol of the given name. */
444+
def classNameToSymbol(name: Name): Symbol = {
445+
def loadClassSymbol(name: Name): Symbol = {
446+
val file = global.classPath findSourceFile ("" +name) getOrElse {
447+
warning("Class " + name + " not found - continuing with a stub.")
448+
return NoSymbol.newClass(name.toTypeName)
449+
}
450+
val completer = new global.loaders.ClassfileLoader(file)
451+
var owner: Symbol = definitions.RootClass
452+
var sym: Symbol = NoSymbol
453+
var ss: Name = null
454+
var start = 0
455+
var end = name indexOf '.'
456+
457+
while (end > 0) {
458+
ss = name.subName(start, end)
459+
sym = owner.info.decls lookup ss
460+
if (sym == NoSymbol) {
461+
sym = owner.newPackage(ss) setInfo completer
462+
sym.moduleClass setInfo completer
463+
owner.info.decls enter sym
464+
}
465+
owner = sym.moduleClass
466+
start = end + 1
467+
end = name.indexOf('.', start)
478468
}
479-
owner = sym.moduleClass
480-
start = end + 1
481-
end = name.indexOf('.', start)
469+
ss = name.subName(0, start)
470+
owner.info.decls lookup ss orElse {
471+
sym = owner.newClass(ss.toTypeName) setInfoAndEnter completer
472+
debuglog("loaded "+sym+" from file "+file)
473+
sym
474+
}
475+
}
476+
477+
def lookupClass(name: Name) = try {
478+
if (name.pos('.') == name.length)
479+
definitions.getMember(definitions.EmptyPackageClass, name.toTypeName)
480+
else
481+
definitions.getClass(name) // see tickets #2464, #3756
482+
} catch {
483+
case _: FatalError => loadClassSymbol(name)
482484
}
483-
ss = name.subName(0, start)
484-
owner.info.decls lookup ss orElse {
485-
sym = owner.newClass(ss.toTypeName) setInfoAndEnter completer
486-
debuglog("loaded "+sym+" from file "+file)
487-
sym
485+
486+
innerClasses.get(name) match {
487+
case Some(entry) =>
488+
//println("found inner class " + name)
489+
val res = innerClasses.classSymbol(entry.externalName)
490+
//println("\trouted to: " + res)
491+
res
492+
case None =>
493+
//if (name.toString.contains("$")) println("No inner class: " + name + innerClasses + " while parsing " + in.file.name)
494+
lookupClass(name)
488495
}
489496
}
490497

491-
/** Return the class symbol of the given name. */
492-
def classNameToSymbol(name: Name): Symbol = lookupClass(name)
493-
494498
var sawPrivateConstructor = false
495499

496500
def parseClass() {

src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -160,27 +160,34 @@ abstract class ICodeReader extends ClassfileParser {
160160
}
161161

162162
override def classNameToSymbol(name: Name) = {
163-
val sym = (
164-
if (nme.isImplClassName(name)) {
165-
val iface = lookupClass(nme.interfaceName(name))
166-
log("forcing " + iface.owner + " at phase: " + phase + " impl: " + iface.implClass)
167-
iface.owner.info // force the mixin type-transformer
168-
lookupClass(name.toTypeName)
169-
}
170-
else if (nme.isModuleName(name)) {
171-
val strippedName = nme.stripModuleSuffix(name).toTermName
172-
val sym = forceMangledName(strippedName.decodedName, true)
173-
sym orElse definitions.getModule(strippedName)
174-
}
175-
else {
176-
forceMangledName(name, false)
177-
atPhase(currentRun.flattenPhase.next)(lookupClass(name))
178-
}
179-
)
180-
if (sym.isModule) sym.moduleClass
181-
else sym
163+
val sym = if (name == fulltpnme.RuntimeNothing)
164+
definitions.NothingClass
165+
else if (name == fulltpnme.RuntimeNull)
166+
definitions.NullClass
167+
else if (nme.isImplClassName(name)) {
168+
val iface = definitions.getClass(nme.interfaceName(name))
169+
log("forcing " + iface.owner + " at phase: " + phase + " impl: " + iface.implClass)
170+
iface.owner.info // force the mixin type-transformer
171+
definitions.getClass(name)
172+
}
173+
else if (nme.isModuleName(name)) {
174+
val strippedName = nme.stripModuleSuffix(name)
175+
val sym = forceMangledName(newTermName(strippedName.decode), true)
176+
177+
if (sym == NoSymbol) definitions.getModule(strippedName)
178+
else sym
179+
}
180+
else {
181+
forceMangledName(name, false)
182+
atPhase(currentRun.flattenPhase.next)(definitions.getClass(name))
183+
}
184+
if (sym.isModule)
185+
sym.moduleClass
186+
else
187+
sym
182188
}
183189

190+
184191
var maxStack: Int = _
185192
var maxLocals: Int = _
186193
val JVM = ClassfileConstants // shorter, uppercase alias for use in case patterns

test/files/pos/t4925.flags

Lines changed: 0 additions & 1 deletion
This file was deleted.

test/files/pos/t4925/S_1.scala

Lines changed: 0 additions & 6 deletions
This file was deleted.

test/files/pos/t4925/S_2.scala

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)