summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2011-11-13 03:53:19 +0000
committerAdrian Thurston <thurston@complang.org>2011-11-13 03:53:19 +0000
commit9c72cf7f7e8a800fed1a5a8c1a8d2ff7876e5c92 (patch)
treedd988e95c080b3d9dd5eb675a9a4b6975da22edd
parent463d17ac6b31219b640ae6fb6f73f505d6114eb7 (diff)
downloadcolm-9c72cf7f7e8a800fed1a5a8c1a8d2ff7876e5c92.tar.gz
PcrGeneration entry point works. refs #332.
-rw-r--r--colm/bytecode.c206
-rw-r--r--colm/fsmrun.c4
2 files changed, 78 insertions, 132 deletions
diff --git a/colm/bytecode.c b/colm/bytecode.c
index 4d13ece6..ddfae53e 100644
--- a/colm/bytecode.c
+++ b/colm/bytecode.c
@@ -2186,25 +2186,25 @@ again:
PdaRun *pdaRun = (PdaRun*)vm_pop();
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
+
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( stream );
+ vm_push( accum );
+
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
pdaRun->fi->codeWV, pdaRun->redLel->tree, 0, 0, fsmRun->mark );
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
-
- vm_push( stream );
- vm_push( accum );
-
/* Push the instruction. */
vm_push( (SW)instr );
@@ -2214,14 +2214,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
-
- vm_push( stream );
- vm_push( accum );
- }
}
else {
treeDownref( prg, sp, stream );
@@ -2307,21 +2299,21 @@ again:
PdaRun *pdaRun = (PdaRun*)vm_pop();
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( (SW)consumed );
- vm_push( stream );
- vm_push( accum );
+ vm_push( stream );
+ vm_push( accum );
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( pdaRun->exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
@@ -2336,15 +2328,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
-
- vm_push( stream );
- vm_push( accum );
- }
}
else {
instr += SIZEOF_CODE + SIZEOF_HALF;
@@ -2434,21 +2417,21 @@ again:
debug( REALM_BYTECODE, "IN_PARSE_FRAG_BKT2 %ld", consumed );
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( (SW)consumed );
- vm_push( input );
- vm_push( accum );
+ vm_push( input );
+ vm_push( accum );
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( pdaRun->exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
@@ -2463,15 +2446,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
-
- vm_push( input );
- vm_push( accum );
- }
}
else {
instr += SIZEOF_CODE;
@@ -2561,21 +2535,21 @@ again:
PdaRun *pdaRun = (PdaRun*)vm_pop();
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
-
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( result );
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
+
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( result );
- vm_push( stream );
- vm_push( accum );
+ vm_push( stream );
+ vm_push( accum );
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( pdaRun->exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
@@ -2590,15 +2564,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( result );
-
- vm_push( stream );
- vm_push( accum );
- }
}
else {
instr += SIZEOF_CODE;
@@ -2680,22 +2645,22 @@ again:
PdaRun *pdaRun = (PdaRun*)vm_pop();
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
-
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
- vm_push( result );
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
+
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( (SW)consumed );
+ vm_push( result );
- vm_push( stream );
- vm_push( accum );
+ vm_push( stream );
+ vm_push( accum );
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( pdaRun->exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
@@ -2710,16 +2675,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
- vm_push( result );
-
- vm_push( stream );
- vm_push( accum );
- }
}
else {
instr += SIZEOF_CODE;
@@ -2811,21 +2766,21 @@ again:
debug( REALM_BYTECODE, "IN_PARSE_FINISH_BKT2\n" );
if ( pcr != PcrDone ) {
- if ( pcr == PcrReduction ) {
- /* Push the execution. */
- vm_pushn( SIZEOF_WORD * 20 );
- Execution *pushedExec = (Execution*)vm_ptop();
- memcpy( pushedExec, exec, sizeof(Execution) );
- pdaRun->exec = exec;
+ /* Push the execution. */
+ vm_pushn( SIZEOF_WORD * 20 );
+ Execution *pushedExec = (Execution*)vm_ptop();
+ memcpy( pushedExec, exec, sizeof(Execution) );
+ pdaRun->exec = exec;
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
+ vm_push( (SW)pdaRun );
+ vm_push( (SW)fsmRun );
+ vm_push( (SW)pcr );
+ vm_push( (SW)consumed );
- vm_push( tree );
- vm_push( accum );
+ vm_push( tree );
+ vm_push( accum );
+ if ( pcr == PcrReduction ) {
/* Execution environment for the reduction code. */
initReductionExecution( pdaRun->exec, prg, &pdaRun->rcodeCollect,
pdaRun, fsmRun, prg->rtd->prodInfo[pdaRun->reduction].frameId,
@@ -2840,15 +2795,6 @@ again:
/* Call execution. */
instr = exec->code;
}
- else {
- vm_push( (SW)pdaRun );
- vm_push( (SW)fsmRun );
- vm_push( (SW)pcr );
- vm_push( (SW)consumed );
-
- vm_push( tree );
- vm_push( accum );
- }
}
else {
instr += SIZEOF_CODE;
diff --git a/colm/fsmrun.c b/colm/fsmrun.c
index 77593c8a..5c4cea63 100644
--- a/colm/fsmrun.c
+++ b/colm/fsmrun.c
@@ -1109,8 +1109,8 @@ case PcrStart:
else if ( prg->ctxDepParsing && lelInfo[tokenId].frameId >= 0 ) {
pdaRun->tokenId = tokenId;
-//return PcrGeneration;
-//case PcrGeneration:
+return PcrGeneration;
+case PcrGeneration:
input = 0;
tokenId = pdaRun->tokenId;