diff options
author | buraq <buraq@epfl.ch> | 2004-01-08 13:47:02 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2004-01-08 13:47:02 +0000 |
commit | 5ab98b10ad4b2d3faffe00462e3983810b722967 (patch) | |
tree | c4a74160852da63880a0eb286cfb5af80765b104 | |
parent | 88ec34baba2ba63da9e3f0da1408c919fa92befd (diff) | |
download | scala-5ab98b10ad4b2d3faffe00462e3983810b722967.tar.gz scala-5ab98b10ad4b2d3faffe00462e3983810b722967.tar.bz2 scala-5ab98b10ad4b2d3faffe00462e3983810b722967.zip |
cleanup
3 files changed, 63 insertions, 128 deletions
diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index 576d3129c7..e46434bbe6 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -15,7 +15,6 @@ import ch.epfl.lamp.util.Position; public class LeftTracerInScala extends TracerInScala { - HashMap export_nestedMap; Tree selector; /** symbol of the accumulator ( scala.SequenceList ) @@ -36,50 +35,11 @@ public class LeftTracerInScala extends TracerInScala { super( dfa, elementType, owner, cf ); this.selector = selector; - helpVarDefs = new Vector(); - - } - - Vector helpVarDefs; - - Symbol makeHelpVar( Symbol realVar ) { - Symbol helpVar = new TermSymbol( pos, - cf.fresh.newName( realVar.name - .toString() ), - owner, - 0) - .setType( defs.LIST_TYPE( elementType ) ) ; - - helpMap.put( realVar, helpVar ); - - Tree varDef = gen.ValDef( helpVar, gen.Nil( cf.pos )); - // set mutable flag of symbol helpVar ?? - helpVarDefs.add( varDef ); - return helpVar; - } - - Symbol makeHelpVarSEQ( Tree pat ) { - String helpName = String.valueOf( pat.hashCode() ); //wicked, in'it ? - Symbol helpVar = - new TermSymbol( pos, - cf.fresh.newName(Name.fromString( helpName )), - owner, - 0) - .setType( defs.LIST_TYPE( pat.getType() )) ; - - Tree varDef = gen.ValDef( helpVar, - gen.mkDefaultValue( cf.pos, - defs.LIST_TYPE( pat.getType() )) - ); - helpVarDefs.add( varDef ); - return helpVar; } protected void initializeSyms() { funSymName = "leftTracer"; - export_nestedMap = new HashMap(); - super.initializeSyms(); this.accumType = _accumType( elementType ); this.accumTypeArg = accumType.typeArgs()[0]; @@ -206,8 +166,6 @@ public class LeftTracerInScala extends TracerInScala { Vector v = new Vector(); - v.addAll( helpVarDefs ); - // // `def leftTracer(...) = ...' the function definition v.add( theDefDef ); @@ -235,29 +193,19 @@ public class LeftTracerInScala extends TracerInScala { v.add( run ); - // vars... - for( Iterator it = helpMap.keySet().iterator(); it.hasNext(); ) { - v.add( bindVar( (Symbol) it.next()) ); - } - - /* DEBUG OUTPUT AT RUNTIME - v.add( gen.Console...( "the trace is" ) ); - v.add( gen.Console...( gen.Ident( pos, resultSym ) ) ); - */ - Tree res[] = new Tree[ v.size() ]; int j = 0; for( Iterator it = v.iterator(); it.hasNext(); ) res[ j++ ] = (Tree) it.next(); - //_m.varMap = export_nestedMap; - return res; } // calling the AlgebraicMatcher here Tree _cur_match( Tree pat ) { + //return gen.mkBooleanLit(cf.pos, true); + //System.out.println("calling algebraic matcher on type:"+pat.type); Matcher m = new Matcher( funSym, @@ -267,28 +215,14 @@ public class LeftTracerInScala extends TracerInScala { if( CollectVariableTraverser.containsBinding( pat )) { switch( pat ) { case Sequence(Tree[] pats): - //System.out.println("ouch! v Left"); - Symbol hv = makeHelpVarSEQ( pat ); - export_nestedMap.put( pat, hv ); - Tree stm = gen.Assign( gen.Ident(Position.FIRSTPOS, hv), currentElem() ); - m.stms = new Tree[2]; - m.stms[0] = stm; - m.stms[1] = gen.mkBooleanLit(Position.FIRSTPOS, true); - return gen.mkBlock(m.stms); + return gen.mkBooleanLit(cf.pos, true); } } - HashMap helpMap = FreshVariableTraverser.getVars( pat, owner, cf.fresh ); - //System.out.println("varMap: "+helpMap ); - - //m.varMap = helpMap; - - //replaceVars( pat ); - am.construct( m, new CaseDef[] { cf.gen.CaseDef( pat, gen.mkBooleanLit( cf.pos, true )), - cf.gen.CaseDef( cf.gen.Ident(pat.pos, defs.PATTERN_WILDCARD), + cf.gen.CaseDef( cf.gen.Ident( pat.pos, defs.PATTERN_WILDCARD ), gen.mkBooleanLit( cf.pos, false)) }, false); Tree res = am.toTree(); diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java index 1b130b4be9..dc2249e58f 100644 --- a/sources/scalac/transformer/matching/RightTracerInScala.java +++ b/sources/scalac/transformer/matching/RightTracerInScala.java @@ -30,6 +30,7 @@ public class RightTracerInScala extends TracerInScala { Symbol targetSym; + HashMap helpMap; HashMap helpMap2 ; Vector helpVarDefs; @@ -48,6 +49,7 @@ public class RightTracerInScala extends TracerInScala { Tree pat, Type elementType ) { super( dfa, elementType, owner, cf ); + this.seqVars = seqVars; this.allVars = CollectVariableTraverser.collectVars( pat ); @@ -55,6 +57,8 @@ public class RightTracerInScala extends TracerInScala { varsToExport.addAll( allVars ); varsToExport.removeAll( seqVars ); + this.helpMap = new HashMap(); + helpMap2 = new HashMap(); helpVarDefs = new Vector(); @@ -83,11 +87,11 @@ public class RightTracerInScala extends TracerInScala { void makeHelpVar( Symbol realVar, boolean keepType ) { Symbol helpVar = new TermSymbol( cf.pos, cf.fresh.newName( realVar.name - .toString() ), + .toString()+"RTIS" ), owner, 0); - //System.out.println("making helpvar : "+realVar+" -> "+helpVar); + //System.out.println("RTiS making helpvar : "+realVar+" -> "+helpVar); if( keepType ) helpVar.setType( realVar.type() ); @@ -273,7 +277,7 @@ public class RightTracerInScala extends TracerInScala { * now we care about free vars */ Tree handleBody1( HashMap helpMap3 ) { - //System.out.println("Rtis.handleBody ... helpMap = " + helpMap ); + //System.out.println("Rtis.handleBody ... helpMap3 = " + helpMap ); // todo: change helpMap s.t. symbols are not reused. Tree res[] = new Tree[ helpMap3.keySet().size() + 1 ]; @@ -282,14 +286,13 @@ public class RightTracerInScala extends TracerInScala { Symbol vsym = (Symbol) it.next(); Symbol hv = (Symbol) helpMap3.get( vsym ); hv.setType( defs.LIST_TYPE( elementType ) ) ; - Tree refv = gen.Ident(Position.FIRSTPOS, vsym); - Tree refhv = gen.Ident(Position.FIRSTPOS, hv); + Tree refv = gen.Ident(cf.pos, vsym); + Tree refhv = gen.Ident(cf.pos, hv); res[ j++ ] = gen.Assign( refhv, refv ); } res[ j ] = gen.mkBooleanLit( Position.FIRSTPOS, true ); // just `true' - - return gen.mkBlock(res); + return gen.mkBlock(res); } // calling the AlgebraicMatcher here @@ -302,8 +305,8 @@ public class RightTracerInScala extends TracerInScala { currentElem(), defs.BOOLEAN_TYPE() ); - final HashMap freshenMap = new HashMap(); - HashMap helpMap3 = new HashMap(); + final HashMap freshenMap = new HashMap(); // sym2exp -> new sym + HashMap helpMap3 = new HashMap(); // new sym -> original sym // "freshening": never use the same symbol more than once // (in later invocations of _cur_match) @@ -435,31 +438,33 @@ System.out.println("RightTracerInScala - the seqVars"+seqVars); */ Tree[] getStms( Tree trace ) { - //System.out.println( "!!getStms.helpVarDefs: "+helpVarDefs); - Vector v = new Vector(); - for( Iterator it = helpVarDefs.iterator(); it.hasNext(); ) { - v.add( (Tree) it.next() ); - } Tree binderFunDef = gen.DefDef( this.funSym, code_body_NEW() ); if( actionsPresent ) { + //System.out.println( "!!getStms.helpVarDefs: "+helpVarDefs); + for( Iterator it = helpVarDefs.iterator(); it.hasNext(); ) { + v.add( (Tree) it.next() ); + } + //v.add( gen.DefDef( this.funSym, code_body() ) ); v.add( binderFunDef ); v.add( callFun( new Tree[] { trace, gen.mkIntLit( cf.pos, 0 ) } ) ); + + // bind variables handled by this righttracer + for( Iterator it = seqVars.iterator(); it.hasNext(); ) { + v.add( bindVar( (Symbol) it.next() ) ); + } + }; + /* - for(Iterator it = helpMap.keySet().iterator(); it.hasNext(); ) { - // DEBUG - Symbol var = (Symbol)it.next(); - v.add( cf.debugPrintRuntime( var.name.toString() )); - v.add( cf.debugPrintRuntime( refHelpVar( var )) ); - } + for(Iterator it = helpMap.keySet().iterator(); it.hasNext(); ) { + System.out.println( "helpMap" ); + System.out.println( it.next() ); + } */ - for( Iterator it = seqVars.iterator(); it.hasNext(); ) { - v.add( bindVar( (Symbol) it.next() ) ); - } Tree result[] = new Tree[ v.size() ]; int j = 0; @@ -481,4 +486,35 @@ System.out.println("RightTracerInScala - the seqVars"+seqVars); Tree current() { return gen.Ident( pos, targetSym );} + Tree refHelpVar( Symbol realVar ) { + Symbol hv = (Symbol)helpMap.get( realVar ); + assert hv != null : realVar; + return gen.Ident(Position.FIRSTPOS, hv); + } + + Tree assignToHelpVar( Symbol realVar, Tree rhs ) { + Tree hv = refHelpVar( realVar ); + return gen.Assign( hv, rhs ); + } + + Tree bindVar(Symbol realVar) { + Tree hv = refHelpVar( realVar ); + /* + System.out.println("binding realVar.name "+realVar.name+" type:"+realVar.type()+" to hv type:"+hv.type()); + realVar.setOwner( owner ); + System.out.println("is same as realVar"+realVar.type().isSameAs( elementType )); + System.out.println("is same as hv"+realVar.type().isSameAs( hv.type() )); + if( realVar.type().isSameAs( elementType )) + return gen.ValDef( realVar, cf.SeqList_head( hv )); + else + return gen.ValDef( realVar, hv ); + */ + if( realVar.type().isSameAs( hv.getType())) { + return gen.ValDef( realVar, hv ); // e.g. x @ _* + } + return gen.ValDef( realVar, cf.SeqList_head( hv )); + + } + + } diff --git a/sources/scalac/transformer/matching/TracerInScala.java b/sources/scalac/transformer/matching/TracerInScala.java index 280aa4edd7..823a40ddc8 100644 --- a/sources/scalac/transformer/matching/TracerInScala.java +++ b/sources/scalac/transformer/matching/TracerInScala.java @@ -20,9 +20,6 @@ public class TracerInScala extends Autom2Scala { protected boolean optimize = true; - /* LeftTracer puts into this HashMap all variables it encounters - */ - HashMap helpMap; public TracerInScala( DetWordAutom dfa, Type elementType, @@ -30,38 +27,6 @@ public class TracerInScala extends Autom2Scala { CodeFactory cf ) { super( dfa, elementType, ownerSym, cf ); - this.helpMap = new HashMap(); - - } - - Tree refHelpVar( Symbol realVar ) { - Symbol hv = (Symbol)helpMap.get( realVar ); - assert hv != null : realVar; - return gen.Ident(Position.FIRSTPOS, hv); - } - - Tree assignToHelpVar( Symbol realVar, Tree rhs ) { - Tree hv = refHelpVar( realVar ); - return gen.Assign( hv, rhs ); - } - - Tree bindVar(Symbol realVar) { - Tree hv = refHelpVar( realVar ); - /* - System.out.println("binding realVar.name "+realVar.name+" type:"+realVar.type()+" to hv type:"+hv.type()); - realVar.setOwner( owner ); - System.out.println("is same as realVar"+realVar.type().isSameAs( elementType )); - System.out.println("is same as hv"+realVar.type().isSameAs( hv.type() )); - if( realVar.type().isSameAs( elementType )) - return gen.ValDef( realVar, cf.SeqList_head( hv )); - else - return gen.ValDef( realVar, hv ); - */ - if( realVar.type().isSameAs( hv.getType())) { - return gen.ValDef( realVar, hv ); // e.g. x @ _* - } - return gen.ValDef( realVar, cf.SeqList_head( hv )); - } } |