summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-28 21:16:32 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-28 21:16:32 +0000
commitc1e6d2822720ba16523c25fce210906c99948f01 (patch)
treefec88fc231ec515e24b9a440d25c65aaba05befa
parent94109ffcbee6037353d5f40b04d64dca44573091 (diff)
downloadscala-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.scala16
-rw-r--r--sources/scalac/Global.java2
-rw-r--r--sources/scalac/backend/jvm/GenJVM.java35
-rw-r--r--sources/scalac/backend/msil/GenMSIL.java2
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;