summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-05-16 20:26:09 -0400
committerAdrian Thurston <thurston@complang.org>2012-05-16 20:26:09 -0400
commit6c0c29b1718a1d8d17f460093d73d7f95059268d (patch)
tree64f54323d637460780d79c297bab210d1a960156
parentd8e71f126d6484ab30b17e265b1da583f7e97778 (diff)
downloadcolm-6c0c29b1718a1d8d17f460093d73d7f95059268d.tar.gz
ARTIFICIAL and NAMED flags now used only in parse trees.
-rw-r--r--colm/bytecode.c2
-rw-r--r--colm/ctinput.cc3
-rw-r--r--colm/pdabuild.cc6
-rw-r--r--colm/pdarun.c31
4 files changed, 27 insertions, 15 deletions
diff --git a/colm/bytecode.c b/colm/bytecode.c
index fa7c9462..a761dd39 100644
--- a/colm/bytecode.c
+++ b/colm/bytecode.c
@@ -217,7 +217,6 @@ Word streamAppend( Program *prg, Tree **sp, Tree *input, InputStream *inputStrea
}
else {
input = prepParseTree( prg, sp, input );
- input->flags |= AF_ARTIFICIAL;
treeUpref( input );
appendTree( inputStream, input );
}
@@ -380,7 +379,6 @@ long streamPush( Program *prg, Tree **sp, FsmRun *fsmRun, InputStream *in, Tree
}
else {
tree = prepParseTree( prg, sp, tree );
- tree->flags |= AF_ARTIFICIAL;
treeUpref( tree );
streamPushTree( fsmRun, in, tree, ignore );
return -1;
diff --git a/colm/ctinput.cc b/colm/ctinput.cc
index 60b97ad5..47861d24 100644
--- a/colm/ctinput.cc
+++ b/colm/ctinput.cc
@@ -405,8 +405,6 @@ void sendNamedLangEl( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
Kid *input = makeTokenWithData( prg, pdaRun, fsmRun, inputStream, klangEl->id, tokdata );
- input->tree->flags |= AF_NAMED;
-
if ( bindId > 0 )
makeTokenPushBinding( pdaRun, bindId, input->tree );
@@ -417,6 +415,7 @@ void sendNamedLangEl( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
parseTree->flags = input->tree->flags;
parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
+ parseTree->flags |= AF_NAMED;
parseTree->shadow = input;
pdaRun->parseInput = parseTree;
diff --git a/colm/pdabuild.cc b/colm/pdabuild.cc
index eafc514b..b44a9b27 100644
--- a/colm/pdabuild.cc
+++ b/colm/pdabuild.cc
@@ -1577,9 +1577,6 @@ void countNodes( Program *prg, int &count, ParseTree *parseTree, Kid *kid )
//count += prg->rtd->lelInfo[kid->tree->id].numCaptureAttr;
- assert( ( parseTree->flags & AF_NAMED ) == ( kid->tree->flags & AF_NAMED ) );
- assert( ( parseTree->flags & AF_ARTIFICIAL ) == ( kid->tree->flags & AF_ARTIFICIAL ) );
-
if ( !( parseTree->flags & AF_NAMED ) &&
!( parseTree->flags & AF_ARTIFICIAL ) &&
treeChild( prg, kid->tree ) != 0 )
@@ -1596,9 +1593,6 @@ void fillNodes( Program *prg, int &nextAvail, Bindings *bindings, long &bindId,
if ( kid != 0 ) {
PatReplNode &node = nodes[ind];
- assert( ( parseTree->flags & AF_NAMED ) == ( kid->tree->flags & AF_NAMED ) );
- assert( ( parseTree->flags & AF_ARTIFICIAL ) == ( kid->tree->flags & AF_ARTIFICIAL ) );
-
Kid *child =
!( parseTree->flags & AF_NAMED ) &&
!( parseTree->flags & AF_ARTIFICIAL ) &&
diff --git a/colm/pdarun.c b/colm/pdarun.c
index 549139c7..be6fb2c0 100644
--- a/colm/pdarun.c
+++ b/colm/pdarun.c
@@ -232,11 +232,11 @@ static void sendBackIgnore( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsm
LangElInfo *lelInfo = prg->rtd->lelInfo;
debug( REALM_PARSE, "sending back: %s%s\n",
lelInfo[ignore->tree->id].name,
- ignore->tree->flags & AF_ARTIFICIAL ? " (artificial)" : "" );
+ _ignore->flags & AF_ARTIFICIAL ? " (artificial)" : "" );
#endif
Head *head = ignore->tree->tokdata;
- int artificial = ignore->tree->flags & AF_ARTIFICIAL;
+ int artificial = _ignore->flags & AF_ARTIFICIAL;
if ( head != 0 && !artificial )
sendBackText( fsmRun, inputStream, stringData( head ), head->length );
@@ -343,7 +343,7 @@ static void sendBack( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun,
{
debug( REALM_PARSE, "sending back: %s\n", prg->rtd->lelInfo[input->id].name );
- if ( input->shadow->tree->flags & AF_NAMED ) {
+ if ( input->flags & AF_NAMED ) {
///* Send back anything in the buffer that has not been parsed. */
//if ( fsmRun->p == fsmRun->runBuf->data )
// sendBackRunBufHead( fsmRun, inputStream );
@@ -356,7 +356,7 @@ static void sendBack( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun,
decrementSteps( pdaRun );
/* Artifical were not parsed, instead sent in as items. */
- if ( input->shadow->tree->flags & AF_ARTIFICIAL ) {
+ if ( input->flags & AF_ARTIFICIAL ) {
/* Check for reverse code. */
if ( input->flags & AF_HAS_RCODE ) {
debug( REALM_PARSE, "tree has rcode, setting on deck\n" );
@@ -428,6 +428,26 @@ void ignoreTree( Program *prg, PdaRun *pdaRun, Tree *tree )
setRegion( pdaRun, emptyIgnore, pdaRun->accumIgnore );
}
+void ignoreTree2( Program *prg, PdaRun *pdaRun, Tree *tree )
+{
+ int emptyIgnore = pdaRun->accumIgnore == 0;
+
+ incrementSteps( pdaRun );
+
+ ParseTree *parseTree = parseTreeAllocate( prg );
+ parseTree->flags |= AF_PARSE_TREE;
+ parseTree->flags |= AF_ARTIFICIAL;
+ parseTree->shadow = kidAllocate( prg );
+ parseTree->shadow->tree = tree;
+
+ parseTree->next = pdaRun->accumIgnore;
+ pdaRun->accumIgnore = parseTree;
+
+ transferReverseCode( pdaRun, parseTree );
+
+ setRegion( pdaRun, emptyIgnore, pdaRun->accumIgnore );
+}
+
Kid *makeTokenWithData( Program *prg, PdaRun *pdaRun, FsmRun *fsmRun,
InputStream *inputStream, int id, Head *tokdata )
{
@@ -862,6 +882,7 @@ static void sendTree( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
parseTree->flags = input->tree->flags;
parseTree->flags &= ~( AF_LEFT_IGNORE | AF_RIGHT_IGNORE );
parseTree->flags |= AF_PARSE_TREE;
+ parseTree->flags |= AF_ARTIFICIAL;
parseTree->shadow = input;
pdaRun->parseInput = parseTree;
@@ -870,7 +891,7 @@ static void sendTree( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, I
static void sendIgnoreTree( Program *prg, Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
Tree *tree = consumeTree( inputStream );
- ignoreTree( prg, pdaRun, tree );
+ ignoreTree2( prg, pdaRun, tree );
}