diff options
author | Adrian Thurston <thurston@complang.org> | 2012-05-16 20:26:09 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-05-16 20:26:09 -0400 |
commit | 6c0c29b1718a1d8d17f460093d73d7f95059268d (patch) | |
tree | 64f54323d637460780d79c297bab210d1a960156 | |
parent | d8e71f126d6484ab30b17e265b1da583f7e97778 (diff) | |
download | colm-6c0c29b1718a1d8d17f460093d73d7f95059268d.tar.gz |
ARTIFICIAL and NAMED flags now used only in parse trees.
-rw-r--r-- | colm/bytecode.c | 2 | ||||
-rw-r--r-- | colm/ctinput.cc | 3 | ||||
-rw-r--r-- | colm/pdabuild.cc | 6 | ||||
-rw-r--r-- | colm/pdarun.c | 31 |
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 ); } |