summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-05-15 21:44:41 -0400
committerAdrian Thurston <thurston@complang.org>2012-05-15 21:44:41 -0400
commite013f0b5b72f566cec964297dc4cdff34db2cd4b (patch)
treefff5410f753829ed5b8e3061b2b170db7f679796
parentb80418b9c0eee4c4ba0ecadc218369be14c17b34 (diff)
downloadcolm-e013f0b5b72f566cec964297dc4cdff34db2cd4b.tar.gz
The IL_ATTACHED flags belong in the parse tree flags, not the data tree.
-rw-r--r--colm/ctinput.cc5
-rw-r--r--colm/pdarun.c40
2 files changed, 16 insertions, 29 deletions
diff --git a/colm/ctinput.cc b/colm/ctinput.cc
index e18f3efd..be3bbdcd 100644
--- a/colm/ctinput.cc
+++ b/colm/ctinput.cc
@@ -412,10 +412,7 @@ void sendNamedLangEl( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
ParseTree *parseTree = parseTreeAllocate( prg );
parseTree->id = input->tree->id;
parseTree->flags = input->tree->flags;
- parseTree->flags &= ~(
- AF_LEFT_IGNORE | AF_LEFT_IL_ATTACHED |
- AF_RIGHT_IGNORE | AF_RIGHT_IL_ATTACHED
- );
+ parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
parseTree->shadow = input;
diff --git a/colm/pdarun.c b/colm/pdarun.c
index 5245d190..6aa1b9cc 100644
--- a/colm/pdarun.c
+++ b/colm/pdarun.c
@@ -586,7 +586,7 @@ static void attachIgnoreRight( Program *prg, Tree **sp, PdaRun *pdaRun )
attachRightIgnore( prg, alter, rightIgnore );
}
- alter->flags |= AF_RIGHT_IL_ATTACHED;
+ pdaRun->stackTop->flags |= AF_RIGHT_IL_ATTACHED;
}
else {
pdaRun->stackTop->shadow->flags |= KF_SUPPRESS_LEFT;
@@ -594,14 +594,12 @@ static void attachIgnoreRight( Program *prg, Tree **sp, PdaRun *pdaRun )
}
}
-static void attachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, ParseTree *to )
+static void attachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, ParseTree *parseTree )
{
- ParseTree *parseTree = to;
Kid *input = parseTree->shadow;
/* Reset. */
- input->tree->flags &= ~AF_LEFT_IL_ATTACHED;
- input->tree->flags &= ~AF_RIGHT_IL_ATTACHED;
+ assert( ! ( parseTree->flags & AF_LEFT_IL_ATTACHED ) );
ParseTree *accum = pdaRun->accumIgnore;
pdaRun->accumIgnore = 0;
@@ -659,7 +657,7 @@ static void attachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, ParseTree
/* Attach the ignore list. */
attachLeftIgnore( prg, input->tree, leftIgnore );
}
- input->tree->flags |= AF_LEFT_IL_ATTACHED;
+ parseTree->flags |= AF_LEFT_IL_ATTACHED;
}
else {
@@ -669,13 +667,14 @@ static void attachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, ParseTree
}
}
+/* Not currently used. Need to revive this. */
void detachIgnoreRight( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, Kid *from )
{
/* Right ignore are immediately discarded since they are copies of
* left-ignores. */
Tree *rightIgnore = 0;
- if ( pdaRun->tokenList != 0 && pdaRun->tokenList->kid->tree->flags & AF_RIGHT_IL_ATTACHED ) {
- Kid *riKid = treeRightIgnoreKid( prg, pdaRun->tokenList->kid->tree );
+ if ( pdaRun->stackTop->flags & AF_RIGHT_IL_ATTACHED ) {
+ Kid *riKid = treeRightIgnoreKid( prg, pdaRun->stackTop->shadow->tree );
/* If the right ignore has a left ignore, then that was the original
* right ignore. */
@@ -690,25 +689,24 @@ void detachIgnoreRight( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun,
else {
rightIgnore = riKid->tree;
treeUpref( rightIgnore );
- removeRightIgnore( prg, sp, pdaRun->tokenList->kid->tree );
- pdaRun->tokenList->kid->tree->flags &= ~AF_RIGHT_IL_ATTACHED;
+ removeRightIgnore( prg, sp, pdaRun->stackTop->shadow->tree );
}
+ pdaRun->stackTop->flags &= ~AF_RIGHT_IL_ATTACHED;
}
treeDownref( prg, sp, rightIgnore );
}
-static void detachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, ParseTree *from )
+static void detachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, ParseTree *parseTree )
{
assert( pdaRun->accumIgnore == 0 );
- ParseTree *parseTree = from;
Kid *input = parseTree->shadow;
/* Detach left. */
Tree *leftIgnore = 0;
- if ( input->tree->flags & AF_LEFT_IL_ATTACHED ) {
+ if ( parseTree->flags & AF_LEFT_IL_ATTACHED ) {
Kid *liKid = treeLeftIgnoreKid( prg, input->tree );
/* If the left ignore has a right ignore, then that was the original
@@ -725,7 +723,7 @@ static void detachIgnoreLeft( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *f
leftIgnore = liKid->tree;
treeUpref( leftIgnore );
removeLeftIgnore( prg, sp, input->tree );
- input->tree->flags &= ~AF_LEFT_IL_ATTACHED;
+ parseTree->flags &= ~AF_LEFT_IL_ATTACHED;
}
}
@@ -855,10 +853,7 @@ static void sendToken( Program *prg, Tree **sp, InputStream *inputStream, FsmRun
ParseTree *parseTree = parseTreeAllocate( prg );
parseTree->id = input->tree->id;
parseTree->flags = input->tree->flags;
- parseTree->flags &= ~(
- AF_LEFT_IGNORE | AF_LEFT_IL_ATTACHED |
- AF_RIGHT_IGNORE | AF_RIGHT_IL_ATTACHED
- );
+ parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
parseTree->shadow = input;
@@ -879,9 +874,7 @@ static void sendTree( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
ParseTree *parseTree = parseTreeAllocate( prg );
parseTree->id = input->tree->id;
parseTree->flags = input->tree->flags;
- parseTree->flags &= ~(
- AF_LEFT_IGNORE | AF_LEFT_IL_ATTACHED | AF_RIGHT_IGNORE | AF_RIGHT_IL_ATTACHED
- );
+ parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
parseTree->shadow = input;
@@ -921,10 +914,7 @@ static void sendEof( Program *prg, Tree **sp, InputStream *inputStream, FsmRun *
ParseTree *parseTree = parseTreeAllocate( prg );
parseTree->id = input->tree->id;
parseTree->flags = input->tree->flags;
- parseTree->flags &= ~(
- AF_LEFT_IGNORE | AF_LEFT_IL_ATTACHED |
- AF_RIGHT_IGNORE | AF_RIGHT_IL_ATTACHED
- );
+ parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
parseTree->shadow = input;