aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-03-23 12:02:32 +0100
committerMartin Odersky <odersky@gmail.com>2013-03-23 12:02:32 +0100
commitf73792d9c6a41c692cc689c52e481e15120bccc4 (patch)
tree683c0e622164f447430700505347ee4fbec31fee /src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
parentb440606b0f0d1772d8a1c3bc1c36b3aa3cb576b5 (diff)
downloaddotty-f73792d9c6a41c692cc689c52e481e15120bccc4.tar.gz
dotty-f73792d9c6a41c692cc689c52e481e15120bccc4.tar.bz2
dotty-f73792d9c6a41c692cc689c52e481e15120bccc4.zip
More fixes to classfile reading.
Most important one: Getting equality of NamedTypes right.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/ClassfileParser.scala')
-rw-r--r--src/dotty/tools/dotc/core/pickling/ClassfileParser.scala22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
index 7d885eaf1..60dfc9d9b 100644
--- a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
+++ b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
@@ -36,7 +36,7 @@ class ClassfileParser(
def srcfile = srcfile0
- private def currentIsTopLevel = !(classRoot.name contains '$')
+ private def currentIsTopLevel = classRoot.owner is Flags.PackageClass
private def mismatchError(c: Symbol) =
throw new IOException(s"class file '${in.file}' has location not matching its contents: contains $c")
@@ -514,12 +514,27 @@ class ClassfileParser(
private def enterOwnInnerClasses() {
def className(name: Name): Name = name.drop(name.lastIndexOf('.') + 1)
- def enterClassAndModule(entry: InnerClassEntry, file: AbstractFile, jflags: Int) =
+ def enterClassAndModule(entry: InnerClassEntry, file: AbstractFile, jflags: Int) = {
loaders.enterClassAndModule(
getOwner(jflags),
entry.originalName,
new ClassfileLoader(file),
- FlagTranslation.classFlags(jflags))
+ FlagTranslation.classFlags(jflags),
+ getScope(jflags))
+ // println(s"entered inner class of ${getOwner(jflags)}: ${entry.originalName} from file $file") // !!! DEBUG
+ /* alternative:
+ val owner = getOwner(jflags)
+ val name = entry.originalName
+ val completer = new ClassfileLoader(file)
+ val flags = FlagTranslation.classFlags(jflags)
+ val cls = cctx.newClassSymbol(owner, name.toTypeName, flags, completer, assocFile = file)
+ def moduleCompleterFn(modul: TermSymbol, cls: ClassSymbol): LazyType =
+ new ModuleClassCompleter(modul, completer)
+ getScope(jflags).enter(cls)
+ val module = cctx.newModuleSymbol(owner, name.toTermName, Flags.EmptyFlags, Flags.EmptyFlags, /*???*/ moduleCompleterFn, assocFile = file)
+ getScope(jflags).enter(module)
+ */
+ }
for (entry <- innerClasses.values) {
// create a new class member for immediate inner classes
@@ -603,6 +618,7 @@ class ClassfileParser(
}
if (scan(tpnme.InnerClassesATTR)) {
+ val attrLen = in.nextInt
val entries = in.nextChar.toInt
for (i <- 0 until entries) {
val innerIndex = in.nextChar