diff options
author | Adrian Thurston <thurston@complang.org> | 2011-11-13 03:53:19 +0000 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2011-11-13 03:53:19 +0000 |
commit | 9c72cf7f7e8a800fed1a5a8c1a8d2ff7876e5c92 (patch) | |
tree | dd988e95c080b3d9dd5eb675a9a4b6975da22edd | |
parent | 463d17ac6b31219b640ae6fb6f73f505d6114eb7 (diff) | |
download | colm-9c72cf7f7e8a800fed1a5a8c1a8d2ff7876e5c92.tar.gz |
PcrGeneration entry point works. refs #332.
-rw-r--r-- | colm/bytecode.c | 206 | ||||
-rw-r--r-- | colm/fsmrun.c | 4 |
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; |