summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-29 20:08:40 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-29 20:08:40 +0000
commit00478513fc3a30fb152ba1934274031ad03d28be (patch)
tree665ffadc07fdde606a7ae857f63fcf0b3808cfa6 /sources/scalac
parent810d03161421b48964bb0a81339a02c9644eb7a8 (diff)
downloadscala-00478513fc3a30fb152ba1934274031ad03d28be.tar.gz
scala-00478513fc3a30fb152ba1934274031ad03d28be.tar.bz2
scala-00478513fc3a30fb152ba1934274031ad03d28be.zip
- Removed Definitions.ROOT
- Changed ROOT_CLASS into a non-module class.
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/symtab/Definitions.java7
-rw-r--r--sources/scalac/symtab/Symbol.java22
-rw-r--r--sources/scalac/symtab/classfile/Pickle.java8
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java12
4 files changed, 37 insertions, 12 deletions
diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java
index 350c33bd5e..ce32355424 100644
--- a/sources/scalac/symtab/Definitions.java
+++ b/sources/scalac/symtab/Definitions.java
@@ -29,7 +29,6 @@ public class Definitions {
// Public Fields & Methods - Root module
/** The root module */
- public final Symbol ROOT;
public final Symbol ROOT_CLASS;
public final Type ROOT_TYPE() {return ROOT_CLASS.type();}
@@ -465,10 +464,8 @@ public class Definitions {
// create attributed tree typer
atyper = new ATreeTyper(global, this);
- // the root module
- ROOT = TermSymbol.newJavaPackageModule(
- Names.ROOT, Symbol.NONE, new PackageParser(global));
- ROOT_CLASS = ROOT.moduleClass();
+ // the root package
+ ROOT_CLASS = ClassSymbol.newRootClass(new PackageParser(global));
// the scala package
Symbol SCALA_PACKAGE = getClass(Names.scala);
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 321b49459a..b074145bf6 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -37,6 +37,10 @@ public abstract class Symbol implements Modifiers, Kinds {
/** The absent symbol */
public static final NoSymbol NONE = new NoSymbol();
+// Attribues -------------------------------------------------------------
+
+ public static final int IS_ROOT = 0x00000001;
+
// Fields -------------------------------------------------------------
/** The unique identifier generator */
@@ -365,7 +369,8 @@ public abstract class Symbol implements Modifiers, Kinds {
/** Does this symbol denote the root class or root module?
*/
public final boolean isRoot() {
- return this.moduleClass() == Global.instance.definitions.ROOT_CLASS;
+ return (attrs & IS_ROOT) != 0;
+ //return this.moduleClass() == Global.instance.definitions.ROOT_CLASS;
}
/** Does this symbol denote something loaded from a Java class? */
@@ -1741,6 +1746,21 @@ public class ClassSymbol extends TypeSymbol {
this.setInfo(parser);
}
+ /** Creates the root class. */
+ public static Symbol newRootClass(PackageParser parser) {
+ int pos = Position.NOPOS;
+ Name name = Names.ROOT.toTypeName();
+ Symbol owner = Symbol.NONE;
+ int flags = JAVA | PACKAGE | FINAL | SYNTHETIC;
+ int attrs = IS_ROOT;
+ Symbol clasz = new ClassSymbol(pos, name, owner, flags, attrs);
+ clasz.setInfo(parser);
+ clasz.primaryConstructor().setInfo(
+ Type.MethodType(Symbol.EMPTY_ARRAY, clasz.typeConstructor()));
+ // Type.MethodType(Symbol.EMPTY_ARRAY, clasz.thisType()));
+ return clasz;
+ }
+
/** Return a fresh symbol with the same fields as this one.
*/
public Symbol cloneSymbol(Symbol owner) {
diff --git a/sources/scalac/symtab/classfile/Pickle.java b/sources/scalac/symtab/classfile/Pickle.java
index c43b56fef0..eb98a8d784 100644
--- a/sources/scalac/symtab/classfile/Pickle.java
+++ b/sources/scalac/symtab/classfile/Pickle.java
@@ -144,8 +144,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
throw new ApplicationError();
}
} else if (sym.kind != NONE) {
- putEntry(sym.isModuleClass() ? sym.name.toTermName() : sym.name);
- if (sym.owner() != Global.instance.definitions.ROOT_CLASS)
+ putEntry(sym.isModuleClass() || sym.isRoot() ? sym.name.toTermName() : sym.name);
+ if (!sym.owner().isRoot())
putSymbol(sym.owner());
}
}
@@ -354,7 +354,7 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
writeByte(NONEsym);
writeByte(0); // space for length
} else {
- if (sym.isModuleClass()) {
+ if (sym.isModuleClass() || sym.isRoot()) {
writeByte(EXTMODCLASSref);
writeByte(0); // space for length
writeRef(sym.name.toTermName());
@@ -364,7 +364,7 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
assert !sym.isConstructor() : sym;
writeRef(sym.name);
}
- if (sym.owner() != Global.instance.definitions.ROOT_CLASS)
+ if (!sym.owner().isRoot())
writeRef(sym.owner());
}
sym.flags &= ~ALTERNATIVE;
diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java
index c36e1433a5..52831297e7 100644
--- a/sources/scalac/symtab/classfile/UnPickle.java
+++ b/sources/scalac/symtab/classfile/UnPickle.java
@@ -186,7 +186,10 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags {
}
if (name == Names.ROOT && owner == Symbol.NONE) {
sym = Global.instance.definitions.ROOT_CLASS;
- if (tag == EXTref) sym = sym.module();
+ if (tag == EXTref) sym = sym;
+ // !!! line above is usefull for the transition
+ // !!! after some time, replace it by the following line:
+ // !!! assert tag != EXTref;
} else {
sym = owner.info().lookup(name);
if (tag == EXTMODCLASSref) {
@@ -336,7 +339,12 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags {
: Type.ThisType(sym);
break;
case SINGLEtpe:
- tpe = Type.singleType(readTypeRef(), readSymbolRef());
+ Type prefix = readTypeRef();
+ Symbol symbol = readSymbolRef();
+ tpe = symbol.isRoot() ? symbol.thisType() : Type.singleType(prefix, symbol);
+ // !!! code above is usefull for the transition
+ // !!! after some time, replace it by the following line:
+ // !!! tpe = Type.singleType(readTypeRef(), readSymbolRef());
break;
case CONSTANTtpe:
Type base = readTypeRef();