summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-01-09 18:04:18 +0000
committerMartin Odersky <odersky@gmail.com>2004-01-09 18:04:18 +0000
commit74a2351508b63734acd86f1b247696b093730e0e (patch)
tree97c5fb40c88cff5de3deda83a1e2ae47c8bf07a5 /sources
parent6a29f17c212f5980dea3e8973a024804b446ccdb (diff)
downloadscala-74a2351508b63734acd86f1b247696b093730e0e.tar.gz
scala-74a2351508b63734acd86f1b247696b093730e0e.tar.bz2
scala-74a2351508b63734acd86f1b247696b093730e0e.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/Array.java2
-rw-r--r--sources/scala/Object.java24
-rw-r--r--sources/scala/Ref.java4
-rw-r--r--sources/scala/concurrent/MailBox.scala2
-rw-r--r--sources/scala/runtime/ResultOrException.java2
-rw-r--r--sources/scala/tools/scalac/ast/parser/Parser.scala22
-rw-r--r--sources/scalac/ast/TreeGen.java4
-rw-r--r--sources/scalac/ast/parser/Parser.java24
-rw-r--r--sources/scalac/symtab/Definitions.java2
-rw-r--r--sources/scalac/symtab/Type.java16
-rw-r--r--sources/scalac/symtab/classfile/CLRPackageParser.java1
-rw-r--r--sources/scalac/typechecker/RefCheck.java35
-rw-r--r--sources/scalac/util/Names.java3
13 files changed, 73 insertions, 68 deletions
diff --git a/sources/scala/Array.java b/sources/scala/Array.java
index 4cd1deee97..6a139ffd98 100644
--- a/sources/scala/Array.java
+++ b/sources/scala/Array.java
@@ -14,7 +14,7 @@ package scala;
/** @meta class [?T] extends scala.Function1[scala.Int, ?T];
*/
public abstract class Array
- extends scala.Object
+ extends java.lang.Object
implements Function1, Cloneable, java.io.Serializable {
/** @meta constr (scala.Int);
diff --git a/sources/scala/Object.java b/sources/scala/Object.java
deleted file mode 100644
index 4a44ad0caa..0000000000
--- a/sources/scala/Object.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/* __ *\
-** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2002, LAMP/EPFL **
-** __\ \/ /__/ __ |/ /__/ __ | **
-** /____/\___/_/ |_/____/_/ | | **
-** |/ **
-\* */
-
-// $OldId: Object.java,v 1.7 2002/03/12 13:32:46 zenger Exp $
-// $Id$
-
-package scala;
-
-/** @meta class extends scala.AnyRef;
- */
-public class Object {
-
- /** This method is needed for optimizing pattern matching expressions
- * which match on constructors of case classes.
- */
- public int $tag() {
- return 0;
- }
-}
diff --git a/sources/scala/Ref.java b/sources/scala/Ref.java
index 5635e433a5..4f45a28569 100644
--- a/sources/scala/Ref.java
+++ b/sources/scala/Ref.java
@@ -11,9 +11,9 @@
package scala;
-/** @meta class [?T] extends scala.Object;
+/** @meta class [?T] extends java.lang.Object;
*/
-public class Ref extends scala.Object {
+public class Ref extends java.lang.Object {
/** @meta field ?T;
*/
diff --git a/sources/scala/concurrent/MailBox.scala b/sources/scala/concurrent/MailBox.scala
index d8c59c774b..f173a2912f 100644
--- a/sources/scala/concurrent/MailBox.scala
+++ b/sources/scala/concurrent/MailBox.scala
@@ -1,7 +1,7 @@
package scala.concurrent;
//class MailBox with Monitor with LinkedListQueueCreator {
-class MailBox with Monitor with ListQueueCreator {
+class MailBox extends Monitor with ListQueueCreator {
type Message = AnyRef;
diff --git a/sources/scala/runtime/ResultOrException.java b/sources/scala/runtime/ResultOrException.java
index 870ed2ce50..4961c785d7 100644
--- a/sources/scala/runtime/ResultOrException.java
+++ b/sources/scala/runtime/ResultOrException.java
@@ -10,7 +10,7 @@
package scala.runtime;
-/** @meta class [?A] extends scala.Object;
+/** @meta class [?A] extends java.lang.Object;
*/
public class ResultOrException {
diff --git a/sources/scala/tools/scalac/ast/parser/Parser.scala b/sources/scala/tools/scalac/ast/parser/Parser.scala
index 07414ae936..830c507e44 100644
--- a/sources/scala/tools/scalac/ast/parser/Parser.scala
+++ b/sources/scala/tools/scalac/ast/parser/Parser.scala
@@ -247,9 +247,13 @@ class Parser(unit: Unit) {
def scalaBooleanDot(pos: int, name: Name): Tree =
make.Select(pos, scalaDot(pos, Names.Boolean), name);
+ def scalaAnyRefConstr(pos: int): Tree =
+ make.Apply(
+ pos, scalaDot(pos, Names.AnyRef.toTypeName()), Tree.EMPTY_ARRAY);
+
def scalaObjectConstr(pos: int): Tree =
make.Apply(
- pos, scalaDot(pos, Names.Object.toTypeName()), Tree.EMPTY_ARRAY);
+ pos, scalaDot(pos, Names.ScalaObject.toTypeName()), Tree.EMPTY_ARRAY);
/** Create tree for for-comprehension <for (enums) do body> or
* <for (enums) yield body> where mapName and flatmapName are chosen
@@ -1737,22 +1741,24 @@ class Parser(unit: Unit) {
*/
def classTemplate(): Tree$Template = {
val pos = s.pos;
+ val parents = new myTreeList();
if (s.token == EXTENDS) {
s.nextToken();
- template()
- } else if (s.token == WITH) {
+ parents.append(constr());
+ } else {
+ parents.append(scalaAnyRefConstr(pos));
+ }
+ parents.append(scalaObjectConstr(pos));
+ if (s.token == WITH) {
s.nextToken();
- val parents = new myTreeList();
- parents.append(scalaObjectConstr(pos));
template(parents)
} else if (s.token == LBRACE) {
- make.Template(
- pos, NewArray.Tree(scalaObjectConstr(pos)), templateBody());
+ make.Template(pos, parents.toArray(), templateBody());
} else {
if (!(s.token == SEMI || s.token == COMMA || s.token == RBRACE))
syntaxError("`extends' or `{' expected", true);
make.Template(
- pos, NewArray.Tree(scalaObjectConstr(pos)), Tree.EMPTY_ARRAY);
+ pos, parents.toArray(), Tree.EMPTY_ARRAY);
}
}
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java
index 1c49620c0f..f9c4e9399d 100644
--- a/sources/scalac/ast/TreeGen.java
+++ b/sources/scalac/ast/TreeGen.java
@@ -1165,7 +1165,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
argtypes[i] = params[i].type();
}
Type[] parentTypes = {
- definitions.OBJECT_TYPE(),
+ definitions.ANYREF_TYPE(),
definitions.FUNCTION_TYPE(argtypes, restype) };
ClassSymbol clazz = new ClassSymbol(
pos, Names.ANON_CLASS_NAME.toTypeName(), owner, 0);
@@ -1196,7 +1196,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
ClassSymbol clazz = new ClassSymbol(
pos, Names.ANON_CLASS_NAME.toTypeName(), owner, 0);
Type[] parentTypes = {
- definitions.OBJECT_TYPE(),
+ definitions.ANYREF_TYPE(),
definitions.PARTIALFUNCTION_TYPE(pattype, restype)};
clazz.setInfo(Type.compoundType(parentTypes, new Scope(), clazz));
clazz.allConstructors().setInfo(
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java
index 5b698764ad..d98324c970 100644
--- a/sources/scalac/ast/parser/Parser.java
+++ b/sources/scalac/ast/parser/Parser.java
@@ -275,9 +275,14 @@ public class Parser implements Tokens {
return make.Select(pos, scalaXmlDot(pos, Names.nobinding), name);
}
+ Tree scalaAnyRefConstr(int pos) {
+ return make.Apply(
+ pos, scalaDot(pos, Names.AnyRef.toTypeName()), Tree.EMPTY_ARRAY);
+ }
+
Tree scalaObjectConstr(int pos) {
return make.Apply(
- pos, scalaDot(pos, Names.Object.toTypeName()), Tree.EMPTY_ARRAY);
+ pos, scalaDot(pos, Names.ScalaObject.toTypeName()), Tree.EMPTY_ARRAY);
}
/** Create tree for for-comprehension <for (enums) do body> or
@@ -1885,22 +1890,25 @@ public class Parser implements Tokens {
*/
Template classTemplate() {
int pos = s.pos;
+ TreeList parents = new TreeList();
if (s.token == EXTENDS) {
s.nextToken();
- return template();
- } else if (s.token == WITH) {
+ parents.append(constr());
+ } else {
+ parents.append(scalaAnyRefConstr(pos));
+ }
+ parents.append(scalaObjectConstr(pos));
+ if (s.token == WITH) {
s.nextToken();
- TreeList parents = new TreeList();
- parents.append(scalaObjectConstr(pos));
- return template(parents);
+ return template(parents);
} else if (s.token == LBRACE) {
return (Template)make.Template(
- pos, new Tree[]{scalaObjectConstr(pos)}, templateBody());
+ pos, parents.toArray(), templateBody());
} else {
if (!(s.token == SEMI || s.token == COMMA || s.token == RBRACE))
syntaxError("`extends' or `{' expected", true);
return (Template)make.Template(
- pos, new Tree[]{scalaObjectConstr(pos)}, Tree.EMPTY_ARRAY);
+ pos, parents.toArray(), Tree.EMPTY_ARRAY);
}
}
diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java
index 79db92a581..8c59358a5e 100644
--- a/sources/scalac/symtab/Definitions.java
+++ b/sources/scalac/symtab/Definitions.java
@@ -491,7 +491,7 @@ public class Definitions {
DOUBLE_CLASS = getClass(Names.scala_Double);
// the scala reference classes
- OBJECT_CLASS = getClass(Names.scala_Object);
+ OBJECT_CLASS = getClass(Names.scala_ScalaObject);
STRING_CLASS = newAlias(SCALA_PACKAGE, Names.String, 0);
REF_CLASS = getClass(Names.scala_Ref);
for (int i = 1; i < TUPLE_COUNT; i++) {
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java
index f0d4a7ce1f..b8b03a9ffb 100644
--- a/sources/scalac/symtab/Type.java
+++ b/sources/scalac/symtab/Type.java
@@ -754,7 +754,8 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
}
/** Is this type of the form scala.FunctionN[T_1, ..., T_n, +T] or
- * scala.Object with scala.FunctionN[T_1, ..., T_n, +T]?
+ * scala.AnyRef with scala.FunctionN[T_1, ..., T_n, +T] or
+ * java.lang.Object with scala.FunctionN[T_1, ..., T_n, +T]?
*/
public boolean isFunctionType() {
switch (this) {
@@ -764,7 +765,8 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
case CompoundType(Type[] parents, Scope members):
return members.isEmpty() &&
parents.length == 2 &&
- parents[0].symbol().fullName() == Names.scala_Object &&
+ (parents[0].symbol().fullName() == Names.java_lang_Object ||
+ parents[0].symbol().fullName() == Names.scala_AnyRef) &&
parents[1].isFunctionType();
}
return false;
@@ -850,13 +852,17 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
// take precedence over abstract ones.
int i = parts.length;
sym = Symbol.NONE;
- while (i > 0 && (sym.kind == NONE || (sym.flags & DEFERRED) != 0)) {
+ while (i > 0) {
i--;
Symbol sym1 = parts[i].lookupNonPrivate(name);
if (sym1.kind != NONE &&
(sym1.flags & PRIVATE) == 0 &&
- (sym.kind == NONE ||
- (sym1.flags & DEFERRED) == 0 ||
+ (sym.kind == NONE
+ ||
+ (sym.flags & DEFERRED) != 0 &&
+ (sym1.flags & DEFERRED) == 0
+ ||
+ (sym.flags & DEFERRED) == (sym1.flags & DEFERRED) &&
sym1.owner().isSubClass(sym.owner())))
sym = sym1;
}
diff --git a/sources/scalac/symtab/classfile/CLRPackageParser.java b/sources/scalac/symtab/classfile/CLRPackageParser.java
index bf2e6971e2..3197389979 100644
--- a/sources/scalac/symtab/classfile/CLRPackageParser.java
+++ b/sources/scalac/symtab/classfile/CLRPackageParser.java
@@ -246,7 +246,6 @@ public class CLRPackageParser extends MetadataParser {
clazz.allConstructors().setInfo(completer.staticsParser(clazz));
clazz.module().setInfo(completer.staticsParser(clazz));
members.enter(clazz);
- // ATTENTION: only if not scala.Object!
Scope.Entry e = members.lookupEntry(clazz.module().name);
if (e != Scope.Entry.NONE)
members.unlink(e);
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index afe0e0df7a..99603befd9 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -726,12 +726,16 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
}
private Tree tagMethod(ClassSymbol clazz) {
- Symbol tagSym = new TermSymbol(
- clazz.pos, Names.tag, clazz,
- clazz.isSubClass(defs.OBJECT_CLASS) ? OVERRIDE : 0)
- .setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, defs.INT_TYPE()));
- clazz.info().members().enter(tagSym);
- return gen.DefDef(tagSym, gen.mkIntLit(clazz.pos, clazz.tag()));
+ Symbol tagSym = new TermSymbol(
+ clazz.pos, Names.tag, clazz,
+ clazz.isSubClass(defs.OBJECT_CLASS) ? OVERRIDE : 0)
+ .setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, defs.INT_TYPE()));
+ clazz.info().members().enter(tagSym);
+ return gen.DefDef(
+ tagSym,
+ gen.mkIntLit(
+ clazz.pos,
+ clazz.isCaseClass() ? clazz.tag() : 0));
}
private Tree hashCodeMethod(ClassSymbol clazz) {
@@ -772,18 +776,23 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
}
// where
- private Template addCaseMethods(Template templ, Symbol sym) {
- if (sym.kind == CLASS && (sym.flags & CASE) != 0) {
- Tree[] body1 = addCaseMethods(templ.body, (ClassSymbol) sym);
- return copy.Template(templ, templ.parents, body1);
+ private Template addCaseMethods(Template templ, ClassSymbol sym) {
+ Tree[] body1;
+ if (sym.isCaseClass()) {
+ body1 = addCaseMethods(templ.body, sym);
+ } else {
+ body1 = new Tree[templ.body.length + 1];
+ System.arraycopy(templ.body, 0, body1, 0, templ.body.length);
+ body1[templ.body.length] = tagMethod(sym);
}
- return templ;
+ return copy.Template(templ, templ.parents, body1);
}
private Tree[] addCaseMethods(Tree[] stats, ClassSymbol clazz) {
TreeList ts = new TreeList();
- if (!hasImplementation(clazz, Names.toString))
+ if (!hasImplementation(clazz, Names.toString)) {
ts.append(toStringMethod(clazz));
+ }
if (!hasImplementation(clazz, Names.equals))
ts.append(equalsMethod(clazz));
if (!hasImplementation(clazz, Names.hashCode))
@@ -934,7 +943,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
validateVariance(sym, sym.info(), CoVariance);
validateVariance(sym, sym.typeOfThis(), CoVariance);
Tree tree1 = super.transform(
- copy.ClassDef(tree, tree.symbol(), tparams, vparams, tpe, addCaseMethods(templ, tree.symbol())));
+ copy.ClassDef(tree, tree.symbol(), tparams, vparams, tpe, addCaseMethods(templ, (ClassSymbol) tree.symbol())));
enclClass = enclClassPrev;
return tree1;
diff --git a/sources/scalac/util/Names.java b/sources/scalac/util/Names.java
index 912f866ada..5b284ca8e3 100644
--- a/sources/scalac/util/Names.java
+++ b/sources/scalac/util/Names.java
@@ -112,6 +112,7 @@ public class Names {
public static final Name Object = Name.fromString("Object");
public static final Name PartialFunction = Name.fromString("PartialFunction");
public static final Name Predef = Name.fromString("Predef");
+ public static final Name ScalaObject = Name.fromString("ScalaObject");
public static final Name ScalaRunTime = Name.fromString("ScalaRunTime");
public static final Name Seq = Name.fromString("Seq");
public static final Name Short = Name.fromString("Short");
@@ -181,7 +182,7 @@ public class Names {
public static final Name scala_Long = Name.fromString("scala.Long");
public static final Name scala_MatchError = Name.fromString("scala.MatchError");
public static final Name scala_Nil = Name.fromString("scala.Nil");
- public static final Name scala_Object = Name.fromString("scala.Object");
+ public static final Name scala_ScalaObject = Name.fromString("scala.ScalaObject");
public static final Name scala_PartialFunction = Name.fromString("scala.PartialFunction");
public static final Name scala_Predef = Name.fromString("scala.Predef");
public static final Name scala_Ref = Name.fromString("scala.Ref");