summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-07-09 08:45:32 +0000
committerburaq <buraq@epfl.ch>2003-07-09 08:45:32 +0000
commit57830a98fc7fd743445abc9faf056de03fa18e7c (patch)
tree4464ea209bb2d5227e34897e851829940c16209e /sources/scalac
parentdf8999d77a1dfcca5070d821d550c237e82a62ce (diff)
downloadscala-57830a98fc7fd743445abc9faf056de03fa18e7c.tar.gz
scala-57830a98fc7fd743445abc9faf056de03fa18e7c.tar.bz2
scala-57830a98fc7fd743445abc9faf056de03fa18e7c.zip
allocation of variables in binding
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/transformer/matching/AlgebraicMatcher.java6
-rw-r--r--sources/scalac/transformer/matching/Autom2Scala.java4
-rw-r--r--sources/scalac/transformer/matching/BerrySethi.java6
-rw-r--r--sources/scalac/transformer/matching/CodeFactory.java18
-rw-r--r--sources/scalac/transformer/matching/RightTracerInScala.java11
5 files changed, 30 insertions, 15 deletions
diff --git a/sources/scalac/transformer/matching/AlgebraicMatcher.java b/sources/scalac/transformer/matching/AlgebraicMatcher.java
index 985e166c14..45995c39d2 100644
--- a/sources/scalac/transformer/matching/AlgebraicMatcher.java
+++ b/sources/scalac/transformer/matching/AlgebraicMatcher.java
@@ -190,11 +190,11 @@ public class AlgebraicMatcher extends PatternTool {
protected Tree[] patternArgs(Tree tree) {
- System.err.println("patternArgs("+tree+")");
+ //System.err.println("patternArgs("+tree+")");
switch (tree) {
case Apply(_, Tree[] args):
if( isSeqApply( (Apply) tree )) {
- System.err.println("patternArgs: is seq apply !");
+ //System.err.println("patternArgs: is seq apply !");
return Tree.EMPTY_ARRAY;// let sequence matcher handle this
}
@@ -366,7 +366,7 @@ public class AlgebraicMatcher extends PatternTool {
Symbol casted,
CaseEnv env,
int case_index) {
- System.out.println("enter(" + pat + ", " + /*typeSym*/ index + ", " + target + ", " + casted + ")");
+ //System.out.println("enter(" + pat + ", " + /*typeSym*/ index + ", " + target + ", " + casted + ")");
// get pattern arguments (if applicable)
Tree[] patArgs = patternArgs(pat);
// get case fields
diff --git a/sources/scalac/transformer/matching/Autom2Scala.java b/sources/scalac/transformer/matching/Autom2Scala.java
index 4d73d6aad1..5c23384948 100644
--- a/sources/scalac/transformer/matching/Autom2Scala.java
+++ b/sources/scalac/transformer/matching/Autom2Scala.java
@@ -141,7 +141,7 @@ public class Autom2Scala {
this.owner = owner;
this.pos = 0;
this.cf = cf;
- this.am = new /*AlgebraicMatcher*/PatternMatcher( cf.unit, cf.infer );
+ this.am = new AlgebraicMatcher( cf.unit, cf.infer );
this.mdefs = new Vector();
this.freeVars = new Vector();
@@ -253,7 +253,7 @@ public class Autom2Scala {
throw new ApplicationError("expected either algebraic or simple label:"+label);
}
- /*AlgebraicMatcher*/PatternMatcher am;
+ AlgebraicMatcher am;
void handleVars( ) {
}
diff --git a/sources/scalac/transformer/matching/BerrySethi.java b/sources/scalac/transformer/matching/BerrySethi.java
index 0396db20c2..76a5c0aecd 100644
--- a/sources/scalac/transformer/matching/BerrySethi.java
+++ b/sources/scalac/transformer/matching/BerrySethi.java
@@ -250,7 +250,7 @@ class BerrySethi {
* the way
*/
TreeSet compFollow1( TreeSet fol, Tree pat ) {
- System.out.println("compFollow1("+fol+","+pat+")");
+ //System.out.println("compFollow1("+fol+","+pat+")");
switch( pat ) {
case Sequence( Tree[] trees ):
TreeSet first = null;
@@ -280,7 +280,7 @@ class BerrySethi {
Integer p = (Integer) this.posMap.get( pat );
TreeSet first = compFirst( t );
- System.out.print("BIND" + first);
+ //System.out.print("BIND" + first);
recVars.put( pat.symbol(), first );
// if( appearsRightmost( n, t ))
@@ -545,7 +545,7 @@ class BerrySethi {
this.finalTag = finalTag;
- System.out.println( "enter automatonFrom("+pat+","+finalTag+")"); // UNIT TEST
+ //System.out.println( "enter automatonFrom("+pat+","+finalTag+")"); // UNIT TEST
//System.out.println( TextTreePrinter.toString(pat) );
/*DEBUG = new TextTreePrinter( System.out );
DEBUG.begin();
diff --git a/sources/scalac/transformer/matching/CodeFactory.java b/sources/scalac/transformer/matching/CodeFactory.java
index 9a6d0ef9a8..dc311408d0 100644
--- a/sources/scalac/transformer/matching/CodeFactory.java
+++ b/sources/scalac/transformer/matching/CodeFactory.java
@@ -34,7 +34,9 @@ class CodeFactory extends PatternTool {
static final Name ISEMPTY_N = Name.fromString("isEmpty");
-
+ Symbol refSym() { // delete Names.Ref
+ return defs.getType( Names.scala_Ref ).symbol() ;
+ }
Symbol seqListSym() {
return defs.getType( Names.scala_List ).symbol() ;
@@ -271,6 +273,19 @@ class CodeFactory extends PatternTool {
return gen.Select(gen.Ident(0, defs.SCALA), Names.Nil/*seqNilSym()*/);
}
+ // EXPERIMENTAL
+ Tree newRef( Tree init ) {
+ //System.out.println( "hello:"+refSym().type() );
+ return gen.New( 0, defs.SCALA_TYPE, refSym(),
+ new Type[] { init.type() },
+ new Tree[] { init } );
+ /*
+ return gen.Apply( gen.TypeApply(0, gen.Select(gen.Ident(0, defs.SCALA), Names.Ref),
+ new Tree[] { gen.mkType(0, init.type() ) } ),
+ new Tree[] { init } );
+ */
+ }
+
Tree newSeqCons( Tree head, Tree tail ) {
return gen.New( Position.NOPOS, defs.SCALA_TYPE, seqConsSym(),
new Type[] { head.type() },
@@ -300,7 +315,6 @@ class CodeFactory extends PatternTool {
*/
public Tree _next( Tree iter ) {
Type elemType = getElemType( iter.type() );
- System.err.println("elemType of next *** "+elemType);
Symbol nextSym = seqIterSym_next();
return _applyNone( gen.Select( iter, nextSym )).setType( elemType );
diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java
index 698a726321..a83419eb91 100644
--- a/sources/scalac/transformer/matching/RightTracerInScala.java
+++ b/sources/scalac/transformer/matching/RightTracerInScala.java
@@ -120,7 +120,8 @@ public class RightTracerInScala extends Autom2Scala {
if( keepType )
rhs = cf.ignoreValue( realVar.type() );
else
- rhs = cf.newSeqNil( elementType );
+ rhs = /* cf.newRef( */ cf.newSeqNil( elementType ) /* ) */;
+ helpVar.flags |= Modifiers.MUTABLE;
Tree varDef = gen.ValDef(helpVar, rhs);
//((ValDef) varDef).kind = Kinds.VAR;
helpVarDefs.add( varDef );
@@ -197,7 +198,7 @@ public class RightTracerInScala extends Autom2Scala {
// same as in LeftTracer
Tree code_fail() {
- return cf.ThrowMatchError( Position.NOPOS, defs.UNIT_TYPE );
+ return cf.ThrowMatchError( _m.pos, defs.UNIT_TYPE );
}
@@ -354,10 +355,10 @@ public class RightTracerInScala extends Autom2Scala {
(CaseDef) cf.make.CaseDef( pat.pos,
cf.make.Ident(pat.pos, WILDCARD_N)
.setSymbol( Symbol.NONE )
- .setType(pat.type()),
+ .setType( pat.type() ),
Tree.Empty,
- gen.mkBooleanLit( pat.pos, false )) }/*,
- true // do binding please */
+ gen.mkBooleanLit( pat.pos, false )) },
+ true // do binding please
);
Tree res = am.toTree().setType( defs.BOOLEAN_TYPE );
//System.out.println("freeVars: "+freeVars);