diff options
author | paltherr <paltherr@epfl.ch> | 2004-08-11 17:19:32 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-08-11 17:19:32 +0000 |
commit | cb7783485b1e83ff0a097ef757dd9e16d9d4cbe6 (patch) | |
tree | 737101b57c4eff1447820bc479ce601c57d253ed | |
parent | dc580cf37ef6534b74dc86e83c5c1d527b524fcb (diff) | |
download | scala-cb7783485b1e83ff0a097ef757dd9e16d9d4cbe6.tar.gz scala-cb7783485b1e83ff0a097ef757dd9e16d9d4cbe6.tar.bz2 scala-cb7783485b1e83ff0a097ef757dd9e16d9d4cbe6.zip |
- Added CASE to MODULE2CLASSFLAGS in Modifiers
- Renamed isCaseObject to isCaseModuleClass and fixed its implementation
- Adapted addCaseMethods in RefCheck
-rwxr-xr-x | sources/scala/tools/scalac/typechecker/RefCheck.scala | 19 | ||||
-rw-r--r-- | sources/scalac/symtab/Modifiers.java | 2 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 10 |
3 files changed, 14 insertions, 17 deletions
diff --git a/sources/scala/tools/scalac/typechecker/RefCheck.scala b/sources/scala/tools/scalac/typechecker/RefCheck.scala index 8387cb483c..f5f1d7c431 100755 --- a/sources/scala/tools/scalac/typechecker/RefCheck.scala +++ b/sources/scala/tools/scalac/typechecker/RefCheck.scala @@ -854,18 +854,17 @@ class RefCheck(globl: scalac.Global) extends Transformer(globl) { if (!hasImplementation(clazz, Names.toString)) { ts.append(toStringMethod(clazz)); } - if (!hasImplementation(clazz, Names.equals)) - ts.append(equalsMethod(clazz)); - if (!hasImplementation(clazz, Names.hashCode)) - ts.append(hashCodeMethod(clazz)); + if (!clazz.isModuleClass()) { + if (!hasImplementation(clazz, Names.equals)) + ts.append(equalsMethod(clazz)); + if (!hasImplementation(clazz, Names.hashCode)) + ts.append(hashCodeMethod(clazz)); + } // the following report error if impl exists - ts.append(caseElementMethod(clazz)); - ts.append(caseArityMethod(clazz)); - ts.append(tagMethod(clazz)); - } else if (clazz.isCaseObject()) { - if (!hasImplementation(clazz, Names.toString)) { - ts.append(toStringMethod(clazz)); + if (!clazz.isModuleClass()) { + ts.append(caseElementMethod(clazz)); + ts.append(caseArityMethod(clazz)); } ts.append(tagMethod(clazz)); } else if ((clazz.flags & ABSTRACT) == 0) { diff --git a/sources/scalac/symtab/Modifiers.java b/sources/scalac/symtab/Modifiers.java index 4ba225471a..7a79680bd6 100644 --- a/sources/scalac/symtab/Modifiers.java +++ b/sources/scalac/symtab/Modifiers.java @@ -67,7 +67,7 @@ public interface Modifiers { int VARIANCES = COVARIANT | CONTRAVARIANT; int CONSTRFLAGS = CASE | JAVA; /** Module flags inherited by their module-class */ - int MODULE2CLASSFLAGS = ACCESSFLAGS | DEPRECATED | SYNTHETIC | JAVA | PACKAGE; + int MODULE2CLASSFLAGS = ACCESSFLAGS | DEPRECATED | SYNTHETIC | JAVA | PACKAGE | CASE; public static class Helper { diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index eab2fb7a3b..a66fb5b2be 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -661,17 +661,15 @@ public abstract class Symbol implements Modifiers, Kinds { return kind == CLASS && (flags & PACKAGE) == 0; } - /** Does this symbol denote a case class? - */ + /** Does this symbol denote a case class? */ public final boolean isCaseClass() { preInitialize(); return kind == CLASS && (flags & CASE) != 0; } - /** Does this symbol denote a case object? - */ - public final boolean isCaseObject() { - return isModuleClass() && (sourceModule().flags & CASE) != 0; + /** Does this symbol denote a case object? */ + public final boolean isCaseModuleClass() { + return isModuleClass() && isCaseClass(); } /** Does this symbol denote a uniform (i.e. parameterless) class? */ |