summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-05-11 21:54:53 -0400
committerAdrian Thurston <thurston@complang.org>2012-05-11 21:54:53 -0400
commit975a07de6f10bacb873375c2515b33798e22d5bd (patch)
tree4b89989956e87787b71222511969d02ae7044433
parent7245d2376c4b0db495c678b676e43584a00becf0 (diff)
downloadcolm-975a07de6f10bacb873375c2515b33798e22d5bd.tar.gz
Use AF_HAS_RCODE only in parse tree flags.
-rw-r--r--colm/bytecode.c10
-rw-r--r--colm/pdarun.c24
-rw-r--r--colm/pdarun.h1
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 );