diff options
author | buraq <buraq@epfl.ch> | 2003-09-02 14:42:58 +0000 |
---|---|---|
committer | buraq <buraq@epfl.ch> | 2003-09-02 14:42:58 +0000 |
commit | fbb6cebf1dffff37067518b765cc2ee6e8d19a62 (patch) | |
tree | 46cedfb454794837030f576420bb8690efa28ada /sources/scalac/transformer/matching/LeftTracerInScala.java | |
parent | 0c5225a4af0704f6838b2f31c30dd3d128bc0e17 (diff) | |
download | scala-fbb6cebf1dffff37067518b765cc2ee6e8d19a62.tar.gz scala-fbb6cebf1dffff37067518b765cc2ee6e8d19a62.tar.bz2 scala-fbb6cebf1dffff37067518b765cc2ee6e8d19a62.zip |
using Switch in translation of automata
code cleanup, removed many obsoleted methods.
Diffstat (limited to 'sources/scalac/transformer/matching/LeftTracerInScala.java')
-rw-r--r-- | sources/scalac/transformer/matching/LeftTracerInScala.java | 69 |
1 files changed, 23 insertions, 46 deletions
diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index 12db42297d..c79fa113e3 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -21,7 +21,6 @@ public class LeftTracerInScala extends TracerInScala { */ Symbol accumSym; - Type _accumType( Type elemType ) { return cf.SeqTraceType( elemType ); } @@ -41,9 +40,6 @@ public class LeftTracerInScala extends TracerInScala { } - - // move WordAutom down. - Vector helpVarDefs; Symbol makeHelpVar( Symbol realVar ) { @@ -77,33 +73,6 @@ public class LeftTracerInScala extends TracerInScala { return helpVar; } - void handleVars( Vector freeVars ) { - for(Iterator it = freeVars.iterator(); it.hasNext(); ) { - makeHelpVar( (Symbol) it.next() ); - } - } - - /** returns a Tree whose type is boolean. - * now we care about free vars - */ - /* - Tree handleBody( HashMap helpMap ) { - Tree res[] = new Tree[ helpMap.keySet().size() + 1 ]; - int j = 0; - for( Iterator it = helpMap.keySet().iterator(); it.hasNext(); ) { - Symbol vsym = (Symbol) it.next(); - Symbol hv = (Symbol) helpMap.get( vsym ); - hv.type( cf.SeqListType( elementType ) ) ; - Tree refv = gen.Ident(Position.FIRSTPOS, vsym); - Tree refhv = gen.Ident(Position.FIRSTPOS, hv); - res[ j++ ] = gen.Assign( refhv, refv ); - } - - res[ j ] = super.handleBody( freeVars ); // just `true' - - return cf.Block(Position.FIRSTPOS, res, res[j].type() ); - } - */ protected void initializeSyms() { funSymName = "leftTracer"; @@ -127,7 +96,6 @@ public class LeftTracerInScala extends TracerInScala { owner, 0 ) .setType( _accumType( elementType ) ) ; - } // should throw an exception here really, e.g. MatchError @@ -136,8 +104,6 @@ public class LeftTracerInScala extends TracerInScala { } - - /** returns translation of transition with label from i. * returns null if there is no such transition(no translation needed) */ @@ -163,6 +129,21 @@ public class LeftTracerInScala extends TracerInScala { } + public Tree code_body() { + + Tree body = code_fail(); // never reached at runtime. + + // state [ nstates-1 ] is the dead state, so we skip it + + //`if( state == q ) <code_state> else {...}' + for( int i = dfa.nstates-2; i >= 0; i-- ) { + body = code_state( i, body ); + } + + return loadCurrentElem( body ); + + } + /** return code for state i of the dfa SAME AS IN SUPER, ONLY SINK IS GONE */ Tree code_state( int i, Tree elseBody ) { @@ -189,22 +170,20 @@ public class LeftTracerInScala extends TracerInScala { Object label = labs.next(); Integer next = (Integer) trans.get( label ); - Tree action = code_delta( i, (Label) label ); if( action != null ) { - stateBody = cf.If( _cur_eq( _iter(), (Label) label ), action, stateBody); } } - - return wrapStateBody( stateBody, - elseBody, - runFinished, - i ); - + stateBody = cf.If( cf.Negate( _ref( hasnSym )), + runFinished, + stateBody ); + return cf.If( cf.Equals( _state(), gen.mkIntLit(cf.pos, i )), + stateBody , + elseBody ); } Tree[] getTrace() { @@ -302,18 +281,16 @@ public class LeftTracerInScala extends TracerInScala { (CaseDef) cf.make.CaseDef( pat.pos, pat, Tree.Empty, - handleBody( helpMap )), + gen.mkBooleanLit( cf.pos, true )), (CaseDef) cf.make.CaseDef( pat.pos, cf.make.Ident(pat.pos, Names.WILDCARD) //DON'T .setSymbol( Symbol.NONE ) ! .setType(pat.type()), Tree.Empty, - gen.mkBooleanLit(Position.FIRSTPOS, false)) }, + gen.mkBooleanLit( cf.pos, false)) }, false ); Tree res = am.toTree().setType( defs.BOOLEAN_TYPE ); - //System.out.println("freeVars: "+freeVars); - return res; } |