diff options
author | buraq <buraq@epfl.ch> | 2003-07-09 08:45:32 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-07-09 08:45:32 +0000 |
commit | 57830a98fc7fd743445abc9faf056de03fa18e7c (patch) | |
tree | 4464ea209bb2d5227e34897e851829940c16209e | |
parent | df8999d77a1dfcca5070d821d550c237e82a62ce (diff) | |
download | scala-57830a98fc7fd743445abc9faf056de03fa18e7c.tar.gz scala-57830a98fc7fd743445abc9faf056de03fa18e7c.tar.bz2 scala-57830a98fc7fd743445abc9faf056de03fa18e7c.zip |
allocation of variables in binding
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); |