diff options
author | Adrian Thurston <thurston@complang.org> | 2012-05-11 21:54:53 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-05-11 21:54:53 -0400 |
commit | 975a07de6f10bacb873375c2515b33798e22d5bd (patch) | |
tree | 4b89989956e87787b71222511969d02ae7044433 | |
parent | 7245d2376c4b0db495c678b676e43584a00becf0 (diff) | |
download | colm-975a07de6f10bacb873375c2515b33798e22d5bd.tar.gz |
Use AF_HAS_RCODE only in parse tree flags.
-rw-r--r-- | colm/bytecode.c | 10 | ||||
-rw-r--r-- | colm/pdarun.c | 24 | ||||
-rw-r--r-- | colm/pdarun.h | 1 |
3 files changed, 13 insertions, 22 deletions
diff --git a/colm/bytecode.c b/colm/bytecode.c index 7624bcf5..f9d1b3f1 100644 --- a/colm/bytecode.c +++ b/colm/bytecode.c @@ -828,16 +828,6 @@ void transferReverseCode( PdaRun *pdaRun, Tree *tree ) } } -void transferReverseCode2( PdaRun *pdaRun, Tree *tree ) -{ - if ( pdaRun->rcBlockCount > 0 ) { - debug( REALM_PARSE, "attaching reverse code to token\n" ); - tree->flags |= AF_HAS_RCODE; - ((ParseTree*)tree)->shadow->tree->flags |= AF_HAS_RCODE; - pdaRun->rcBlockCount = 0; - } -} - Code *popReverseCode( RtCodeVect *allRev ) { /* Read the length */ diff --git a/colm/pdarun.c b/colm/pdarun.c index 1e62d6e8..3720b069 100644 --- a/colm/pdarun.c +++ b/colm/pdarun.c @@ -224,8 +224,9 @@ void sendBackTree( InputStream *inputStream, Tree *tree ) * PcrRevIgnore */ static void sendBackIgnore( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, - InputStream *inputStream, Kid *ignoreKidList ) + InputStream *inputStream, Kid *_ignore ) { + Kid *ignoreKidList = pt(_ignore->tree)->shadow; Kid *ignore = ignoreKidList; #ifdef COLM_LOG @@ -244,9 +245,9 @@ static void sendBackIgnore( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsm decrementSteps( pdaRun ); /* Check for reverse code. */ - if ( ignore->tree->flags & AF_HAS_RCODE ) { + if ( _ignore->tree->flags & AF_HAS_RCODE ) { pdaRun->onDeck = true; - ignore->tree->flags &= ~AF_HAS_RCODE; + _ignore->tree->flags &= ~AF_HAS_RCODE; } if ( pdaRun->steps == pdaRun->targetSteps ) { @@ -446,10 +447,10 @@ static void sendBack( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, /* Artifical were not parsed, instead sent in as items. */ if ( pt(input->tree)->shadow->tree->flags & AF_ARTIFICIAL ) { /* Check for reverse code. */ - if ( pt(input->tree)->shadow->tree->flags & AF_HAS_RCODE ) { + if ( pt(input->tree)->flags & AF_HAS_RCODE ) { debug( REALM_PARSE, "tree has rcode, setting on deck\n" ); pdaRun->onDeck = true; - pt(input->tree)->shadow->tree->flags &= ~AF_HAS_RCODE; + pt(input->tree)->flags &= ~AF_HAS_RCODE; } treeUpref( pt(input->tree)->shadow->tree ); @@ -458,10 +459,10 @@ static void sendBack( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, } else { /* Check for reverse code. */ - if ( pt(input->tree)->shadow->tree->flags & AF_HAS_RCODE ) { + if ( pt(input->tree)->flags & AF_HAS_RCODE ) { debug( REALM_PARSE, "tree has rcode, setting on deck\n" ); pdaRun->onDeck = true; - pt(input->tree)->shadow->tree->flags &= ~AF_HAS_RCODE; + pt(input->tree)->flags &= ~AF_HAS_RCODE; } /* Push back the token data. */ @@ -500,7 +501,6 @@ void ignoreTree( Program *prg, PdaRun *pdaRun, Tree *tree ) { int emptyIgnore = pdaRun->accumIgnore == 0; - transferReverseCode( pdaRun, tree ); incrementSteps( pdaRun ); @@ -515,6 +515,8 @@ void ignoreTree( Program *prg, PdaRun *pdaRun, Tree *tree ) ignore->next = pdaRun->accumIgnore; pdaRun->accumIgnore = ignore; + transferReverseCode( pdaRun, (Tree*)parseTree ); + setRegion( pdaRun, emptyIgnore, pt(pdaRun->accumIgnore->tree) ); } @@ -1229,7 +1231,7 @@ case PcrGeneration: } if ( pdaRun->parseInput != 0 ) - transferReverseCode2( pdaRun, pdaRun->parseInput->tree ); + transferReverseCode( pdaRun, pdaRun->parseInput->tree ); long pcr = parseToken( prg, sp, pdaRun, fsmRun, inputStream, PcrStart ); @@ -1480,7 +1482,7 @@ head: /* Check for reverse code. */ //restore = 0; - if ( pt(tree)->shadow->tree->flags & AF_HAS_RCODE ) { + if ( pt(tree)->flags & AF_HAS_RCODE ) { /* If tree caused some reductions, now is not the right time to backup * over the reverse code. We need to backup over the reductions first. Store * the count of the reductions and do it when the count drops to zero. */ @@ -2114,7 +2116,7 @@ case PcrReverse: pdaRun->checkNext = true; pdaRun->checkStop = true; - sendBackIgnore( prg, sp, pdaRun, fsmRun, inputStream, pt(ignore->tree)->shadow ); + sendBackIgnore( prg, sp, pdaRun, fsmRun, inputStream, ignore ); } else { /* Now it is time to undo something. Pick an element from the top of diff --git a/colm/pdarun.h b/colm/pdarun.h index b5fc186d..1eb3f138 100644 --- a/colm/pdarun.h +++ b/colm/pdarun.h @@ -386,7 +386,6 @@ void decrementSteps( PdaRun *pdaRun ); int makeReverseCode( PdaRun *pdaRun ); void transferReverseCode( PdaRun *pdaRun, Tree *tree ); -void transferReverseCode2( PdaRun *pdaRun, Tree *tree ); void initPdaRun( PdaRun *pdaRun, struct ColmProgram *prg, PdaTables *tables, FsmRun *fsmRun, int parserId, long stopTarget, int revertOn, Tree *context ); |