summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-08-11 17:19:32 +0000
committerpaltherr <paltherr@epfl.ch>2004-08-11 17:19:32 +0000
commitcb7783485b1e83ff0a097ef757dd9e16d9d4cbe6 (patch)
tree737101b57c4eff1447820bc479ce601c57d253ed
parentdc580cf37ef6534b74dc86e83c5c1d527b524fcb (diff)
downloadscala-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-xsources/scala/tools/scalac/typechecker/RefCheck.scala19
-rw-r--r--sources/scalac/symtab/Modifiers.java2
-rw-r--r--sources/scalac/symtab/Symbol.java10
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? */