summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala4
-rw-r--r--sources/scalac/ast/printer/TextTreePrinter.java4
-rw-r--r--sources/scalac/backend/msil/TypeCreator.java43
-rw-r--r--sources/scalac/symtab/Modifiers.java7
-rw-r--r--sources/scalac/symtab/Symbol.java7
-rw-r--r--sources/scalac/symtab/Type.java5
-rw-r--r--sources/scalac/transformer/ExplicitOuterClassesPhase.java1
7 files changed, 19 insertions, 52 deletions
diff --git a/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala b/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
index f6feeea3a0..950083dda9 100644
--- a/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
+++ b/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
@@ -590,10 +590,6 @@ class TextTreePrinter(writer: PrintWriter) with TreePrinter {
print(KW_DEF);
print(Space);
}
- if ((flags & Modifiers.STATIC) != 0) {
- print(KW_STATIC);
- print(Space);
- }
}
protected def printTemplate(symbol: Symbol,
diff --git a/sources/scalac/ast/printer/TextTreePrinter.java b/sources/scalac/ast/printer/TextTreePrinter.java
index 72e8b9848d..9cefa783d8 100644
--- a/sources/scalac/ast/printer/TextTreePrinter.java
+++ b/sources/scalac/ast/printer/TextTreePrinter.java
@@ -695,10 +695,6 @@ public class TextTreePrinter implements TreePrinter {
print(KW_DEF);
print(Text.Space);
}
- if ((flags & Modifiers.STATIC) != 0) {
- print(KW_STATIC);
- print(Text.Space);
- }
}
protected void printTemplate(Symbol symbol,
diff --git a/sources/scalac/backend/msil/TypeCreator.java b/sources/scalac/backend/msil/TypeCreator.java
index f555531650..16250f0455 100644
--- a/sources/scalac/backend/msil/TypeCreator.java
+++ b/sources/scalac/backend/msil/TypeCreator.java
@@ -636,27 +636,14 @@ final class TypeCreator {
/** create the method corresponding to the symbol
*/
MethodBase createMethod(Symbol sym) {
- final Symbol owner = sym.owner();
MethodBase method = null;
//log("createMethod: " + dumpSym(sym));
//log("createMethod: sym.owner() = " + dumpSym(sym.owner()));
switch (sym.info()) {
case MethodType(Symbol[] vparams, scalac.symtab.Type result):
- if (sym.isInitializer()) {
- //log("constructor symbol: " + dumpSym(sym));
- //TypeBuilder type = (TypeBuilder) getType(result);
- TypeBuilder type = (TypeBuilder) getType(sym.owner());
- method = createMethod(type, sym.name, sym.info(), sym.flags);
- } else {
- int flags = ( owner.isJava() && owner.isModuleClass() ) ?
- sym.flags | Modifiers.STATIC :
- sym.flags;
- if (owner.isInterface())
- flags |= Modifiers.DEFERRED;
-
- TypeBuilder type = (TypeBuilder)getType(owner);
- method = createMethod(type, sym.name, sym.info(), flags);
- }
+ TypeBuilder type = (TypeBuilder)getType(sym.owner());
+ method = createMethod
+ (type, sym.name, sym.info(), translateMethodAttributes(sym));
break;
default:
assert false : "Symbol doesn't have a method type: " + dumpSym(sym);
@@ -670,7 +657,7 @@ final class TypeCreator {
/**
*/
MethodBase createMethod(TypeBuilder type, Name name,
- scalac.symtab.Type symType, int flags)
+ scalac.symtab.Type symType, short attr)
{
MethodBase method = null;
switch (symType) {
@@ -681,8 +668,7 @@ final class TypeCreator {
if (name == Names.CONSTRUCTOR) {
ConstructorBuilder constructor = type.DefineConstructor
- (translateMethodAttributes(flags, true),
- CallingConventions.Standard, params);
+ (attr, CallingConventions.Standard, params);
for (int i = 0; i < vparams.length; i++)
constructor.DefineParameter
@@ -696,8 +682,7 @@ final class TypeCreator {
else sname = name.toString();
MethodBuilder methodBuilder = type.DefineMethod
- (sname, translateMethodAttributes(flags, false),
- getType(result), params);
+ (sname, attr, getType(result), params);
for (int i = 0; i < vparams.length; i++)
methodBuilder.DefineParameter
@@ -755,10 +740,8 @@ final class TypeCreator {
assert field instanceof FieldBuilder;
return field;
}
- int flags = ( sym.owner().isJava() && sym.owner().isModuleClass() ) ?
- sym.flags | Modifiers.STATIC : sym.flags;
field = owner.DefineField(sym.name.toString(), getType(sym.type()),
- translateFieldAttributes(flags));
+ translateFieldAttributes(sym));
Object o = symbols2fields.put(sym, field);
assert o == null : "Cannot re-define field: " + dumpSym(sym);
return field;
@@ -859,7 +842,8 @@ final class TypeCreator {
/** Translates Scala modifiers into FieldAttributes
*/
- public static short translateFieldAttributes(int mods) {
+ public static short translateFieldAttributes(Symbol field) {
+ int mods = field.flags;
int attr = 0;
if (Modifiers.Helper.isFinal(mods))
@@ -871,7 +855,7 @@ final class TypeCreator {
else
attr |= FieldAttributes.Public;
- if (Modifiers.Helper.isStatic(mods))
+ if (field.owner().isJava() && field.owner().isModuleClass())
attr |= FieldAttributes.Static;
return (short)attr;
@@ -880,10 +864,13 @@ final class TypeCreator {
/** Translates Scala modifiers into MethodAttributes
*/
- public static short translateMethodAttributes(int mods, boolean constructor)
+ public static short translateMethodAttributes(Symbol method)
{
+ int mods = method.flags;
+ if (method.owner().isInterface())
+ mods |= Modifiers.DEFERRED;
int attr = MethodAttributes.HideBySig;
- if (!constructor) {
+ if (!method.isInitializer()) {
attr |= MethodAttributes.Virtual;
if (Modifiers.Helper.isFinal(mods))
attr |= MethodAttributes.Final;
diff --git a/sources/scalac/symtab/Modifiers.java b/sources/scalac/symtab/Modifiers.java
index 0e835610e3..1348adf16b 100644
--- a/sources/scalac/symtab/Modifiers.java
+++ b/sources/scalac/symtab/Modifiers.java
@@ -40,7 +40,6 @@ public interface Modifiers {
int PACKAGE = 0x00100000; // symbol is a java package.
int LABEL = 0x00200000; // symbol is a label symbol
- int STATIC = 0x00400000; // "static" inner classes (i.e. after class norm.)
int STABLE = 0x00800000; // functions that are assumed to be stable
// (typically, access methods for valdefs)
@@ -66,7 +65,7 @@ public interface Modifiers {
int SOURCEFLAGS = 0x00000077 | DEF | REPEATED | MODUL | MUTABLE | PACKAGE | PARAM | TRAIT | COVARIANT | CONTRAVARIANT; // these modifiers can be set in source programs.
int ACCESSFLAGS = PRIVATE | PROTECTED;
int VARIANCES = COVARIANT | CONTRAVARIANT;
- int CONSTRFLAGS = CASE | JAVA | STATIC;
+ int CONSTRFLAGS = CASE | JAVA;
public static class Helper {
@@ -116,10 +115,6 @@ public interface Modifiers {
return (flags & MODUL) != 0;
}
- public static boolean isStatic(int flags) {
- return (flags & STATIC) != 0;
- }
-
public static boolean isJava(int flags) {
return (flags & JAVA) != 0;
}
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index b37cb278bc..470a566a56 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -482,11 +482,6 @@ public abstract class Symbol implements Modifiers, Kinds {
return (flags & SYNTHETIC) != 0;
}
- /** Does this symbol denote a static member? */
- public final boolean isStatic() {
- return (flags & STATIC) != 0;
- }
-
/** Does this symbol denote an accessor? */
public final boolean isAccessor() {
return (flags & ACCESSOR) != 0;
@@ -1279,7 +1274,7 @@ public abstract class Symbol implements Modifiers, Kinds {
*/
public boolean overrides(Symbol that) {
return
- ((this.flags | that.flags) & (PRIVATE | STATIC)) == 0 &&
+ ((this.flags | that.flags) & PRIVATE) == 0 &&
this.name == that.name &&
owner.thisType().memberType(this).derefDef().isSubType(
owner.thisType().memberType(that).derefDef());
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java
index d21cbba3ba..f0041be728 100644
--- a/sources/scalac/symtab/Type.java
+++ b/sources/scalac/symtab/Type.java
@@ -847,7 +847,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
*/
public Symbol lookup(Symbol sym, Type pre, Relation relation) {
assert !sym.isOverloaded(): Debug.show(sym);
- if (sym.isPrivate() || sym.isStatic() || sym.isInitializer())
+ if (sym.isPrivate() || sym.isInitializer())
return symbol().isSubClass(sym.owner()) ? sym : Symbol.NONE;
Type symtype = pre.memberType(sym).derefDef();
Symbol[] classes = classes();
@@ -882,8 +882,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
boolean warn)
{
if (sym == sym1) return true;
- if (sym1.isPrivate() || sym1.isStatic() || sym1.isInitializer())
- return false;
+ if (sym1.isPrivate() || sym1.isInitializer()) return false;
// System.out.println("Is 'sym1' " + relation + " 'sym' in 'pre' ?"
// + "\n sym : " + Debug.show(sym)
// + "\n sym1 : " + Debug.show(sym1)
diff --git a/sources/scalac/transformer/ExplicitOuterClassesPhase.java b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
index 57c5067862..1829a1fb28 100644
--- a/sources/scalac/transformer/ExplicitOuterClassesPhase.java
+++ b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
@@ -353,7 +353,6 @@ public class ExplicitOuterClassesPhase extends Phase {
Tree[] body = transform(impl.body);
body = Tree.concat(body, genSuperMethods());
context = context.outer;
- if (context != null) clasz.flags |= Modifiers.STATIC;
return gen.ClassDef(clasz, parents, impl.symbol(), body);
case DefDef(_, _, _, _, _, Tree rhs):