diff options
author | paltherr <paltherr@epfl.ch> | 2004-02-28 21:16:32 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-02-28 21:16:32 +0000 |
commit | c1e6d2822720ba16523c25fce210906c99948f01 (patch) | |
tree | fec88fc231ec515e24b9a440d25c65aaba05befa | |
parent | 94109ffcbee6037353d5f40b04d64dca44573091 (diff) | |
download | scala-c1e6d2822720ba16523c25fce210906c99948f01.tar.gz scala-c1e6d2822720ba16523c25fce210906c99948f01.tar.bz2 scala-c1e6d2822720ba16523c25fce210906c99948f01.zip |
- Changed Global.symdata from Map<FullName,Pick...
- Changed Global.symdata from Map<FullName,Pickle> to Map<Symbol,Pickle>
-rw-r--r-- | sources/scala/tools/scalac/typechecker/Analyzer.scala | 16 | ||||
-rw-r--r-- | sources/scalac/Global.java | 2 | ||||
-rw-r--r-- | sources/scalac/backend/jvm/GenJVM.java | 35 | ||||
-rw-r--r-- | sources/scalac/backend/msil/GenMSIL.java | 2 |
4 files changed, 28 insertions, 27 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala index 9dd7de85e4..94037eb15b 100644 --- a/sources/scala/tools/scalac/typechecker/Analyzer.scala +++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala @@ -131,14 +131,18 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer( stats(i) match { case Tree$ClassDef(_, _, _, _, _, _) | Tree$ModuleDef(_, _, _, _) => val sym = stats(i).symbol(); - val fullname = sym.fullName(); - if (global.symdata.get(fullname) == null) { + val key = if (sym.isModule()) sym.moduleClass() else sym; + var termSym = sym.owner().info().lookup(sym.name.toTermName()); + var typeSym = sym.owner().info().lookup(sym.name.toTypeName()); + if (termSym.isExternal()) termSym = Symbol.NONE; + if (typeSym.isExternal()) typeSym = Symbol.NONE; + if (sym.isClass() || (sym.isModule() && typeSym.isNone())) { val pickle: Pickle = new Pickle(); - pickle.add(sym.owner().info().lookup(sym.name.toTermName())); - pickle.add(sym.owner().info().lookup(sym.name.toTypeName())); + if (!termSym.isNone()) pickle.add(termSym); + if (!typeSym.isNone()) pickle.add(typeSym); pickle.pickle(); - global.symdata.put(fullname, pickle); - } + global.symdata.put(key, pickle); + } case Tree$PackageDef(packaged, templ) => genSymData(templ.body); case _ => diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java index 320886e914..dd2d8ba4cf 100644 --- a/sources/scalac/Global.java +++ b/sources/scalac/Global.java @@ -103,7 +103,7 @@ public abstract class Global { */ public final Map/*<Symbol, String>*/ mapSymbolComment = new HashMap(); - public final Map/*<FullName, Pickle>*/ symdata = new HashMap(); + public final Map/*<Symbol, Pickle>*/ symdata = new HashMap(); /** The compiler command arguments */ diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java index eda2650739..ad71d825c5 100644 --- a/sources/scalac/backend/jvm/GenJVM.java +++ b/sources/scalac/backend/jvm/GenJVM.java @@ -1340,7 +1340,7 @@ class GenJVM { * module class as static methods, to enable the use of the module * from Java. */ - protected void dumpModuleMirrorClass(Context ctx, Symbol cSym) { + protected void dumpModuleMirrorClass(Context ctx, Symbol cSym, Pickle pickle) { String mainName = javaName(cSym); String mirrorName = mainName.substring(0, mainName.length() - 1); @@ -1379,7 +1379,7 @@ class GenJVM { mirrorCode.getPC(), Position.line(member.pos)); } - addScalaAttr(mirrorClass); + addScalaAttr(mirrorClass, pickle); try { String fileName = javaFileName(mirrorName); @@ -1394,19 +1394,14 @@ class GenJVM { * Add the "Scala" attribute to the given class, in which the * symbol table is saved. */ - protected void addScalaAttr(JClass cls) { - Name className = Name.fromString(cls.getName()); - - if (global.symdata.containsKey(className)) { - Pickle pickle = (Pickle)global.symdata.get(className); - JOtherAttribute scalaAttr = - fjbgContext.JOtherAttribute(cls, - cls, - SCALA_ATTR, - pickle.bytes, - pickle.size()); - cls.addAttribute(scalaAttr); - } + protected void addScalaAttr(JClass cls, Pickle pickle) { + JOtherAttribute scalaAttr = + fjbgContext.JOtherAttribute(cls, + cls, + SCALA_ATTR, + pickle.bytes, + pickle.size()); + cls.addAttribute(scalaAttr); } /// Names @@ -1637,11 +1632,13 @@ class GenJVM { } protected void leaveClass(Context ctx, Symbol cSym) { - Symbol iSym = cSym.owner().lookup(cSym.name); - if (ctx.isModuleClass && (iSym.isNone() || iSym.isExternal())) - dumpModuleMirrorClass(ctx, cSym); + Pickle pickle = (Pickle)global.symdata.get(cSym); + if (pickle != null) + if (ctx.isModuleClass) + dumpModuleMirrorClass(ctx, cSym, pickle); + else + addScalaAttr(ctx.clazz, pickle); - addScalaAttr(ctx.clazz); try { String fileName = javaFileName(ctx.clazz.getName()); ctx.clazz.writeTo(fileName); diff --git a/sources/scalac/backend/msil/GenMSIL.java b/sources/scalac/backend/msil/GenMSIL.java index 2a7749c8b0..e7af2b36f9 100644 --- a/sources/scalac/backend/msil/GenMSIL.java +++ b/sources/scalac/backend/msil/GenMSIL.java @@ -230,7 +230,7 @@ public final class GenMSIL { */ private void emitSymtab(Symbol clazz) { TypeBuilder type = (TypeBuilder) tc.getType(clazz); - Pickle pickle = (Pickle)global.symdata.get(clazz.fullName()); + Pickle pickle = (Pickle)global.symdata.get(clazz); if (pickle != null) { byte[] symtab = new byte[pickle.size() + 8]; symtab[0] = 1; |