summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab')
-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
4 files changed, 15 insertions, 12 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;