summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r--sources/scalac/symtab/Modifiers.java8
-rw-r--r--sources/scalac/symtab/Symbol.java7
-rw-r--r--sources/scalac/symtab/Type.java4
-rw-r--r--sources/scalac/symtab/classfile/ClassfileParser.java4
4 files changed, 16 insertions, 7 deletions
diff --git a/sources/scalac/symtab/Modifiers.java b/sources/scalac/symtab/Modifiers.java
index cc9111887a..292eb28bbc 100644
--- a/sources/scalac/symtab/Modifiers.java
+++ b/sources/scalac/symtab/Modifiers.java
@@ -19,7 +19,9 @@ public interface Modifiers {
int SEALED = 0x00000010;
int OVERRIDE = 0x00000020;
int CASE = 0x00000040;
- int ABSTRACTCLASS = 0x00000080; // abstract class
+ int ABSTRACT = 0x00000080; // abstract class, or used in conjunction
+ // with abstract override.
+ // Note difference to DEFERRED!
int DEF = 0x00000100; // a def parameter
int REPEATED = 0x00000200; // a repeated parameter
@@ -69,7 +71,9 @@ public interface Modifiers {
public static class Helper {
public static boolean isAbstract(int flags) {
- return (flags & (DEFERRED | ABSTRACTCLASS)) != 0;
+ // todo: ABSTRACT and DEFERRED should be separated.
+ return (flags & DEFERRED) != 0 ||
+ (flags & (ABSTRACT | OVERRIDE)) == ABSTRACT;
}
public static boolean isFinal(int flags) {
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 4b710248c6..3303edac5f 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -328,10 +328,15 @@ public abstract class Symbol implements Modifiers, Kinds {
public final boolean isAbstractClass() {
preInitialize();
- return (flags & ABSTRACTCLASS) != 0 &&
+ return kind == CLASS && (flags & ABSTRACT) != 0 &&
this != Global.instance.definitions.ARRAY_CLASS;
}
+ public final boolean isAbstractOverride() {
+ preInitialize();
+ return (flags & (ABSTRACT | OVERRIDE)) == (ABSTRACT | OVERRIDE);
+ }
+
/* Does this symbol denote an anonymous class? */
public final boolean isAnonymousClass() {
return isClass() && name.startsWith(Names.ANON_CLASS_NAME);
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java
index fac8f18f48..1532d9c0e6 100644
--- a/sources/scalac/symtab/Type.java
+++ b/sources/scalac/symtab/Type.java
@@ -157,7 +157,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
ExtCompoundType res = new ExtCompoundType(parts, members);
res.tsym = new ClassSymbol(
Position.FIRSTPOS, Names.COMPOUND_NAME.toTypeName(), Symbol.NONE,
- SYNTHETIC | ABSTRACTCLASS);
+ SYNTHETIC | ABSTRACT);
res.tsym.setInfo(res);
res.tsym.primaryConstructor().setInfo(
Type.MethodType(Symbol.EMPTY_ARRAY, Type.NoType));
@@ -590,7 +590,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
case TypeRef(_, Symbol sym, _):
return sym.kind == CLASS &&
((sym.flags & JAVA) != 0 ||
- (sym.flags & (TRAIT | ABSTRACTCLASS)) == 0);
+ (sym.flags & (TRAIT | ABSTRACT)) == 0);
default:
return false;
}
diff --git a/sources/scalac/symtab/classfile/ClassfileParser.java b/sources/scalac/symtab/classfile/ClassfileParser.java
index 28f31c3647..9debd17b0f 100644
--- a/sources/scalac/symtab/classfile/ClassfileParser.java
+++ b/sources/scalac/symtab/classfile/ClassfileParser.java
@@ -86,7 +86,7 @@ public class ClassfileParser implements ClassfileConstants {
// todo: correct flag transition
c.flags = transFlags(flags);
if ((c.flags & Modifiers.DEFERRED) != 0)
- c.flags = c.flags & ~Modifiers.DEFERRED | Modifiers.ABSTRACTCLASS;
+ c.flags = c.flags & ~Modifiers.DEFERRED | Modifiers.ABSTRACT;
Type supertpe = readClassType(in.nextChar());
Type[] basetpes = new Type[in.nextChar() + 1];
this.locals = new Scope();
@@ -145,7 +145,7 @@ public class ClassfileParser implements ClassfileConstants {
if ((flags & 0x0010) != 0)
res |= Modifiers.FINAL;
if ((flags & 0x0200) != 0)
- res |= Modifiers.INTERFACE | Modifiers.TRAIT | Modifiers.ABSTRACTCLASS;
+ res |= Modifiers.INTERFACE | Modifiers.TRAIT | Modifiers.ABSTRACT;
return res | Modifiers.JAVA;
}