summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-05-24 15:20:17 +0000
committerburaq <buraq@epfl.ch>2004-05-24 15:20:17 +0000
commit4daaa21895808a2147713df3a045cb08d9211933 (patch)
tree987c1bdda68c9d95ed733081622a514893ade670
parent0349ad65d868e3e6966882a9d50b308f538795e9 (diff)
downloadscala-4daaa21895808a2147713df3a045cb08d9211933.tar.gz
scala-4daaa21895808a2147713df3a045cb08d9211933.tar.bz2
scala-4daaa21895808a2147713df3a045cb08d9211933.zip
name change select... to case...
-rw-r--r--sources/scala/CaseClass.scala4
-rw-r--r--sources/scala/Iterator.scala4
-rw-r--r--sources/scalac/typechecker/RefCheck.java26
-rw-r--r--sources/scalac/util/Names.java4
-rw-r--r--test/files/run/misc.scala14
5 files changed, 28 insertions, 24 deletions
diff --git a/sources/scala/CaseClass.scala b/sources/scala/CaseClass.scala
index 492534b744..ec8a101e92 100644
--- a/sources/scala/CaseClass.scala
+++ b/sources/scala/CaseClass.scala
@@ -18,10 +18,10 @@ trait CaseClass {
/** for a case class A(x_0,...,x_(k-1)), returns x_i for 0 <= i < k,
** null otherwise
*/
- def selectElement(n:int):Any ;
+ def caseElement(n:int):Any ;
/** for a case class A(x_0,...,x_(k-1)), returns k
*/
- def numberOfElements: int ;
+ def caseArity: int ;
}
diff --git a/sources/scala/Iterator.scala b/sources/scala/Iterator.scala
index b013888060..4457d03ee7 100644
--- a/sources/scala/Iterator.scala
+++ b/sources/scala/Iterator.scala
@@ -43,9 +43,9 @@ object Iterator {
def fromCaseClass(n:CaseClass): Iterator[Any] = new Iterator[Any] {
private var c:Int = 0;
- private val cmax = n.numberOfElements;
+ private val cmax = n.caseArity;
def hasNext = c < cmax;
- def next = { val a = n.selectElement( c ); c = c + 1; a }
+ def next = { val a = n caseElement c; c = c + 1; a }
}
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index 8cdb4788cf..b44e52b640 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -29,8 +29,9 @@ import Tree.*;
* It preforms the following transformations.
*
* - Local modules are replaced by variables and classes
- * - equals, and hashCode, selectElement and toString methods are added to
- * case classes, unless they are defined in the class or a baseclass
+ * - caseArity, caseElement implementations added to case classes
+ * - equals, and hashCode and toString methods are added to case classes,
+ * unless they are defined in the class or a baseclass
* different from java.lang.Object
* - Calls to case factory methods are replaced by new's.
* - Type nodes are replaced by TypeTerm nodes.
@@ -688,10 +689,11 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
return gen.DefDef(toStringSym, body);
}
- private Tree selectElementMethod( ClassSymbol clazz ) {
- Symbol seSym = clazz.newMethod( clazz.pos, OVERRIDE, Names.selectElement );
- Symbol seParam = seSym.newVParam(
- clazz.pos, 0, Names.n, defs.INT_TYPE());
+ private Tree caseElementMethod( ClassSymbol clazz ) {
+ Symbol seSym =
+ clazz.newMethod( clazz.pos, FINAL|OVERRIDE, Names.caseElement );
+ Symbol seParam =
+ seSym.newVParam( clazz.pos, 0, Names.n, defs.INT_TYPE() );
seSym.setInfo(
Type.MethodType( new Symbol[]{ seParam }, defs.ANY_TYPE() ));
clazz.info().members().enter( seSym );
@@ -711,8 +713,9 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
return gen.DefDef(seSym, body);
}
- private Tree numberOfElementsMethod( ClassSymbol clazz ) {
- Symbol seSym = clazz.newMethod( clazz.pos, OVERRIDE, Names.numberOfElements );
+ private Tree caseArityMethod( ClassSymbol clazz ) {
+ Symbol seSym =
+ clazz.newMethod( clazz.pos, FINAL|OVERRIDE, Names.caseArity );
seSym.setInfo(
Type.PolyType( Symbol.EMPTY_ARRAY, defs.INT_TYPE() ));
clazz.info().members().enter( seSym );
@@ -858,9 +861,10 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
if (!hasImplementation(clazz, Names.hashCode))
ts.append(hashCodeMethod(clazz));
- // will it report error if impl exists?
- ts.append(selectElementMethod(clazz));
- ts.append(numberOfElementsMethod(clazz));
+ // the following report error if impl exists
+ ts.append( caseElementMethod( clazz ));
+ ts.append( caseArityMethod( clazz ));
+
ts.append(tagMethod(clazz));
if (ts.length() > 0) {
Tree[] stats1 = new Tree[stats.length + ts.length()];
diff --git a/sources/scalac/util/Names.java b/sources/scalac/util/Names.java
index 619ddf5b07..4ab401a010 100644
--- a/sources/scalac/util/Names.java
+++ b/sources/scalac/util/Names.java
@@ -169,7 +169,6 @@ public class Names {
public static final Name nobinding = Name.fromString("nobinding");
public static final Name next = Name.fromString("next");
public static final Name newArray = Name.fromString("newArray");
- public static final Name numberOfElements = Name.fromString("numberOfElements");
public static final Name null_ = Name.fromString("null");
public static final Name predef = Name.fromString("predef");
public static final Name print = Name.fromString("print");
@@ -177,9 +176,10 @@ public class Names {
public static final Name scala = Name.fromString("scala");
public static final Name xml = Name.fromString("xml");
public static final Name synchronized_ = Name.fromString("synchronized");
+ public static final Name caseArity = Name.fromString("caseArity");
+ public static final Name caseElement = Name.fromString("caseElement");
public static final Name eq = Name.fromString("eq");
public static final Name equals = Name.fromString("equals");
- public static final Name selectElement = Name.fromString("selectElement");
public static final Name tail = Name.fromString("tail");
public static final Name toString = Name.fromString("toString");
public static final Name that = Name.fromString("that");
diff --git a/test/files/run/misc.scala b/test/files/run/misc.scala
index 045a43e47c..7548b1996e 100644
--- a/test/files/run/misc.scala
+++ b/test/files/run/misc.scala
@@ -234,13 +234,13 @@ System.out.println();
case class Foo(i:int, j:char, c:Bar) ;
Console.println(
- Foo(3,'a',Bar()).selectElement( -1 ) == null
- && Foo(3,'a',Bar()).selectElement( 0 ) == 3
- && Foo(3,'a',Bar()).selectElement( 1 ) == 'a'
- && Foo(3,'a',Bar()).selectElement( 2 ) == Bar()
- && Foo(3,'a',Bar()).selectElement( 3 ) == null
- && Bar().numberOfElements == 0
- && Foo(3,'a',Bar()).numberOfElements == 3);
+ Foo(3,'a',Bar()).caseElement( -1 ) == null
+ && Foo(3,'a',Bar()).caseElement( 0 ) == 3
+ && Foo(3,'a',Bar()).caseElement( 1 ) == 'a'
+ && Foo(3,'a',Bar()).caseElement( 2 ) == Bar()
+ && Foo(3,'a',Bar()).caseElement( 3 ) == null
+ && Bar().caseArity == 0
+ && Foo(3,'a',Bar()).caseArity == 3);
//############################################################################