summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-08-21 10:30:27 +0000
committerMartin Odersky <odersky@gmail.com>2003-08-21 10:30:27 +0000
commitb227b272110f0654064632642c2ca1031e7c68c6 (patch)
tree747970915b10fc1eb9b80481c44052a3808fd08f /sources
parent7b1200a4f4ecd1014055f65f384bd814754256b0 (diff)
downloadscala-b227b272110f0654064632642c2ca1031e7c68c6.tar.gz
scala-b227b272110f0654064632642c2ca1031e7c68c6.tar.bz2
scala-b227b272110f0654064632642c2ca1031e7c68c6.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/symtab/Symbol.java17
-rw-r--r--sources/scalac/symtab/Type.java2
-rw-r--r--sources/scalac/symtab/classfile/Pickle.java6
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java2
-rw-r--r--sources/scalac/transformer/AddConstructors.java2
-rw-r--r--sources/scalac/transformer/AddInterfaces.java4
-rw-r--r--sources/scalac/transformer/AddInterfacesPhase.java4
-rw-r--r--sources/scalac/typechecker/Analyzer.java4
-rw-r--r--sources/scalac/typechecker/RefCheck.java2
9 files changed, 23 insertions, 20 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index a98e44844d..05777015ba 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -395,7 +395,7 @@ public abstract class Symbol implements Modifiers, Kinds {
/** Is this symbol the primary constructor of a type? */
public final boolean isPrimaryConstructor() {
- return isConstructor() && this == primaryConstructorClass().primaryConstructor();
+ return isConstructor() && this == constructorClass().primaryConstructor();
}
public final boolean isGenerated() {
@@ -490,7 +490,7 @@ public abstract class Symbol implements Modifiers, Kinds {
*/
public Symbol classOwner() {
Symbol owner = owner();
- Symbol clazz = owner.primaryConstructorClass();
+ Symbol clazz = owner.constructorClass();
if (clazz.primaryConstructor() == owner) return clazz;
else return owner;
}
@@ -514,7 +514,7 @@ public abstract class Symbol implements Modifiers, Kinds {
/* If this is a primary constructor, return the class it constructs.
* Otherwise return the symbol itself.
*/
- public Symbol primaryConstructorClass() {
+ public Symbol constructorClass() {
return this;
}
@@ -913,10 +913,13 @@ public abstract class Symbol implements Modifiers, Kinds {
assert (this.flags & that.flags & JAVA) != 0 ||
(this.flags & OVERLOADFLAGS) == (that.flags & OVERLOADFLAGS)
: Integer.toHexString(this.flags) + "@" + Debug.show(this) + " <> " + Integer.toHexString(that.flags) + "@" + Debug.show(that);
- TermSymbol overloaded = new TermSymbol(
- pos, name, owner,
+ assert this.isConstructor() == that.isConstructor();
+ int overflags =
((this.flags | that.flags) & (JAVA | OVERLOADFLAGS)) |
- (this.flags & that.flags & ACCESSFLAGS));
+ (this.flags & that.flags & ACCESSFLAGS);
+ TermSymbol overloaded = (this.isConstructor())
+ ? TermSymbol.newConstructor(this.constructorClass(), overflags)
+ : new TermSymbol(pos, name, owner, overflags);
overloaded.setInfo(new LazyOverloadedType(this, that));
return overloaded;
}
@@ -1123,7 +1126,7 @@ public class TermSymbol extends Symbol {
return type().valueParams();
}
- public Symbol primaryConstructorClass() {
+ public Symbol constructorClass() {
return isConstructor() && clazz != null ? clazz : this;
}
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java
index 5a66ff9a17..847b847baa 100644
--- a/sources/scalac/symtab/Type.java
+++ b/sources/scalac/symtab/Type.java
@@ -989,7 +989,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
Type toInstance(Symbol sym, Type pre, Symbol clazz) {
if (pre == NoType || clazz.kind != CLASS)
return this;
- Symbol ownclass = sym.owner().primaryConstructorClass();
+ Symbol ownclass = sym.owner().constructorClass();
if (ownclass == clazz &&
pre.widen().symbol().isSubClass(ownclass)) {
switch (pre.baseType(ownclass)) {
diff --git a/sources/scalac/symtab/classfile/Pickle.java b/sources/scalac/symtab/classfile/Pickle.java
index 8cf0efd2de..3d19855e90 100644
--- a/sources/scalac/symtab/classfile/Pickle.java
+++ b/sources/scalac/symtab/classfile/Pickle.java
@@ -82,7 +82,7 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
return
sym.name.toTermName() == rootname && sym.owner() == rootowner
||
- sym.isConstructor() && isLocal(sym.primaryConstructorClass())
+ sym.isConstructor() && isLocal(sym.constructorClass())
||
(sym.kind != NONE && isLocal(sym.owner()));
}
@@ -134,7 +134,7 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
break;
case VAL:
if (sym.isPrimaryConstructor())
- putSymbol(sym.primaryConstructorClass());
+ putSymbol(sym.constructorClass());
else if (sym.isModule())
putSymbol(sym.moduleClass());
break;
@@ -319,7 +319,7 @@ public class Pickle implements Kinds, Modifiers, EntryTags {
break;
case VAL:
if (sym.isPrimaryConstructor())
- writeRef(sym.primaryConstructorClass());
+ writeRef(sym.constructorClass());
else if (sym.isModule())
writeRef(sym.moduleClass());
break;
diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java
index 2e333e5cd2..f5b4f7ab4f 100644
--- a/sources/scalac/symtab/classfile/UnPickle.java
+++ b/sources/scalac/symtab/classfile/UnPickle.java
@@ -37,7 +37,7 @@ public class UnPickle implements Kinds, Modifiers, EntryTags {
UnPickle(Symbol root, byte[] data, Name sourceName) {
global = Global.instance;
if (root.isConstructor()) {
- this.classroot = root.primaryConstructorClass();
+ this.classroot = root.constructorClass();
this.moduleroot = classroot.module();
} else if (root.isType()) {
this.classroot = root;
diff --git a/sources/scalac/transformer/AddConstructors.java b/sources/scalac/transformer/AddConstructors.java
index 226b476dc5..732762adb3 100644
--- a/sources/scalac/transformer/AddConstructors.java
+++ b/sources/scalac/transformer/AddConstructors.java
@@ -73,7 +73,7 @@ public class AddConstructors extends Transformer {
Symbol getConstructor(Symbol classConstr) {
return getConstructor(classConstr,
(((Type.MethodType)classConstr.info()).vparams),
- classConstr.primaryConstructorClass());
+ classConstr.constructorClass());
}
Symbol getConstructor(Symbol classConstr, Symbol[] paramSyms, Symbol owner) {
diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java
index fadc2eed35..628eef8321 100644
--- a/sources/scalac/transformer/AddInterfaces.java
+++ b/sources/scalac/transformer/AddInterfaces.java
@@ -170,7 +170,7 @@ class AddInterfaces extends Transformer {
if (sym.isConstructor()) {
// If the constructor now refers to the interface
// constructor, use the class constructor instead.
- Symbol clsSym = sym.primaryConstructorClass();
+ Symbol clsSym = sym.constructorClass();
if (phase.needInterface(clsSym))
return gen.Select(qualifier,
phase.getClassSymbol(clsSym).primaryConstructor());
@@ -205,7 +205,7 @@ class AddInterfaces extends Transformer {
if (sym.isConstructor()) {
// If the constructor now refers to the interface
// constructor, use the class constructor instead.
- Symbol clsSym = sym.primaryConstructorClass();
+ Symbol clsSym = sym.constructorClass();
if (phase.needInterface(clsSym))
return gen.Ident(phase.getClassSymbol(clsSym).primaryConstructor());
else
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java
index c012f403c9..ce4f95e734 100644
--- a/sources/scalac/transformer/AddInterfacesPhase.java
+++ b/sources/scalac/transformer/AddInterfacesPhase.java
@@ -33,7 +33,7 @@ public class AddInterfacesPhase extends Phase {
public Type transformInfo(Symbol sym, Type tp) {
if (sym.isPrimaryConstructor()) {
- Symbol clazz = sym.primaryConstructorClass();
+ Symbol clazz = sym.constructorClass();
if (!(clazz.isClass() && needInterface(clazz))) return tp;
// The symbol is a constructor of a class which needs
// an interface. All its value arguments have to be
@@ -195,7 +195,7 @@ public class AddInterfacesPhase extends Phase {
*/
protected Symbol getClassSymbol(Symbol ifaceSym) {
if (ifaceSym.isPrimaryConstructor())
- return getClassSymbol(ifaceSym.primaryConstructorClass())
+ return getClassSymbol(ifaceSym.constructorClass())
.primaryConstructor();
if (!needInterface(ifaceSym))
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java
index da68b474b7..3718e377bb 100644
--- a/sources/scalac/typechecker/Analyzer.java
+++ b/sources/scalac/typechecker/Analyzer.java
@@ -276,7 +276,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
error(sym.pos, "`override' modifier not allowed for classes");
}
if ((sym.flags & DEF) != 0 && sym.owner().isPrimaryConstructor() &&
- (sym.owner().primaryConstructorClass().flags & CASE) != 0) {
+ (sym.owner().constructorClass().flags & CASE) != 0) {
error(sym.pos, "`def' modifier not allowed for case class parameters");
}
/*!!!
@@ -1540,7 +1540,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
constrs[i] = transform(constrs[i], CONSTRmode | SUPERmode, Type.AnyType);
Symbol f = TreeInfo.methSymbol(constrs[i]);
if (f != null) {
- Symbol c = f.primaryConstructorClass();
+ Symbol c = f.constructorClass();
if (c.kind == CLASS) {
c.initialize();//to detect cycles
if (i > 0 && (c.flags & JAVA) == 0 && c.isExternal()) {
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index 08f1539eb8..e78d628631 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -292,7 +292,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
/** The variance of symbol `base' relative to the class which defines `tvar'.
*/
int flip(Symbol base, Symbol tvar) {
- Symbol clazz = tvar.owner().primaryConstructorClass();
+ Symbol clazz = tvar.owner().constructorClass();
Symbol sym = base;
int flip = CoVariance;
while (sym != clazz && flip != AnyVariance) {