summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2009-11-11 23:15:35 +0000
committerAdrian Thurston <thurston@complang.org>2009-11-11 23:15:35 +0000
commitcf7457af1c9dcbf6796120e3f55eaba82932cd9e (patch)
tree9ef4fead481886c6f0dc71e243327904ea9de4b5
parent43af9dedf317d02429734c2666b08df394a4bf6e (diff)
downloadcolm-cf7457af1c9dcbf6796120e3f55eaba82932cd9e.tar.gz
Added more fsmRun pointers to where they will be needed when runBuf is teased
out of InputStream. Did more parameter organization.
-rw-r--r--colm/bytecode.cpp14
-rw-r--r--colm/ctinput.cpp8
-rw-r--r--colm/fsmcodegen.cpp4
-rw-r--r--colm/fsmexec.cpp2
-rw-r--r--colm/fsmrun.cpp42
-rw-r--r--colm/fsmrun.h17
-rw-r--r--colm/parsedata.cpp4
7 files changed, 46 insertions, 45 deletions
diff --git a/colm/bytecode.cpp b/colm/bytecode.cpp
index b2a45244..501de5ea 100644
--- a/colm/bytecode.cpp
+++ b/colm/bytecode.cpp
@@ -136,7 +136,7 @@ Tree *call_parser( Tree **&sp, Program *prg, Stream *stream,
PdaTables *tables = prg->rtd->pdaTables;
FsmRun fsmRun( prg );
PdaRun pdaRun( prg, tables, parserId, stopId, revertOn );
- parse( sp, stream->in, &fsmRun, &pdaRun );
+ parse( sp, &pdaRun, &fsmRun, stream->in );
commit_full( sp, &pdaRun, 0 );
Tree *tree = get_parsed_root( &pdaRun, stopId > 0 );
tree_upref( tree );
@@ -184,7 +184,7 @@ Tree *call_tree_parser( Tree **&sp, Program *prg, Tree *input,
FsmRun fsmRun( prg );
PdaRun pdaRun( prg, tables, parserId, stopId, revertOn );
- parse( sp, &inputStream, &fsmRun, &pdaRun );
+ parse( sp, &pdaRun, &fsmRun, &inputStream );
commit_full( sp, &pdaRun, 0 );
Tree *tree = get_parsed_root( &pdaRun, stopId > 0 );
tree_upref( tree );
@@ -216,7 +216,7 @@ void call_parser_frag( Tree **&sp, Program *prg, Tree *input, Accum *accum )
InputStreamString inputStream( s.c_str(), s.size() );
init_input_stream( &inputStream );
- parse_frag( sp, &inputStream, accum->fsmRun, accum->pdaRun );
+ parse_frag( sp, accum->pdaRun, accum->fsmRun, &inputStream );
}
else {
InputStreamString inputStream( "", 0 );
@@ -235,7 +235,7 @@ Tree *parser_frag_finish( Tree **&sp, Program *prg, Accum *accum )
InputStreamString inputStream( "", 0 );
init_input_stream( &inputStream );
- parse_frag_finish( sp, &inputStream, accum->fsmRun, accum->pdaRun );
+ parse_frag_finish( sp, accum->pdaRun, accum->fsmRun, &inputStream );
commit_full( sp, accum->pdaRun, 0 );
Tree *tree = get_parsed_root( accum->pdaRun, false );
@@ -266,11 +266,11 @@ Tree *stream_pull( Program *prg, FsmRun *fsmRun, Stream *stream, Tree *length )
return construct_string( prg, tokdata );
}
-void undo_pull( Program *prg, Stream *stream, Tree *str )
+void undo_pull( Program *prg, FsmRun *fsmRun, Stream *stream, Tree *str )
{
const char *data = string_data( ( (Str*)str )->value );
long length = string_length( ( (Str*)str )->value );
- send_back_text( stream->in, data, length );
+ send_back_text( fsmRun, stream->in, data, length );
}
Word stream_push( Tree **&sp, Program *prg, FsmRun *fsmRun, Stream *stream, Tree *any )
@@ -2309,7 +2309,7 @@ again:
}
#endif
- undo_pull( prg, (Stream*)stream, string );
+ undo_pull( prg, fsmRun, (Stream*)stream, string );
tree_downref( prg, sp, stream );
tree_downref( prg, sp, string );
break;
diff --git a/colm/ctinput.cpp b/colm/ctinput.cpp
index f120a24d..2c6b4bc3 100644
--- a/colm/ctinput.cpp
+++ b/colm/ctinput.cpp
@@ -269,7 +269,7 @@ void InputStreamRepl::pushBackNamed()
offset = replItem->data.length();
}
-void send_named_lang_el( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser )
+void send_named_lang_el( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
/* All three set by getLangEl. */
long bindId;
@@ -282,7 +282,7 @@ void send_named_lang_el( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, Pd
#ifdef COLM_LOG_PARSE
if ( colm_log_parse ) {
- cerr << "named langEl: " << parser->tables->rtd->lelInfo[klangEl->id].name << endl;
+ cerr << "named langEl: " << pdaRun->tables->rtd->lelInfo[klangEl->id].name << endl;
}
#endif
@@ -291,8 +291,8 @@ void send_named_lang_el( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, Pd
if ( data != 0 )
tokdata = string_alloc_full( fsmRun->prg, data, length );
- Kid *input = make_token( inputStream, fsmRun, parser, klangEl->id, tokdata, true, bindId );
- send_handle_error( sp, parser, fsmRun, inputStream, input );
+ Kid *input = make_token( pdaRun, fsmRun, inputStream, klangEl->id, tokdata, true, bindId );
+ send_handle_error( sp, pdaRun, fsmRun, inputStream, input );
}
diff --git a/colm/fsmcodegen.cpp b/colm/fsmcodegen.cpp
index c3cea369..32706cc6 100644
--- a/colm/fsmcodegen.cpp
+++ b/colm/fsmcodegen.cpp
@@ -1010,7 +1010,7 @@ void FsmCodeGen::writeExec()
setLabelsNeeded();
out <<
- "void fsm_execute( InputStream *inputStream, FsmRun *fsmRun )\n"
+ "void fsm_execute( FsmRun *fsmRun, InputStream *inputStream )\n"
"{\n"
"/*_resume:*/\n";
@@ -1059,7 +1059,7 @@ void FsmCodeGen::writeCode()
/* Referenced in the runtime lib, but used only in the compiler. */
out <<
- "void send_named_lang_el( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser )\n"
+ "void send_named_lang_el( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )\n"
"{\n"
" assert(false);\n"
"}\n";
diff --git a/colm/fsmexec.cpp b/colm/fsmexec.cpp
index e87a671f..246c8b0c 100644
--- a/colm/fsmexec.cpp
+++ b/colm/fsmexec.cpp
@@ -91,7 +91,7 @@ void exec_action( FsmRun *fsmRun, GenAction *genAction )
fsmRun->mark[genAction->markId] = fsmRun->p;
}
-void fsm_execute( InputStream *inputStream, FsmRun *fsmRun )
+void fsm_execute( FsmRun *fsmRun, InputStream *inputStream )
{
int _klen;
unsigned int _trans;
diff --git a/colm/fsmrun.cpp b/colm/fsmrun.cpp
index c95ef38f..cef371c1 100644
--- a/colm/fsmrun.cpp
+++ b/colm/fsmrun.cpp
@@ -142,7 +142,7 @@ void undo_position( InputStream *inputStream, const char *data, long length )
inputStream->byte -= length;
}
-void send_back_runbuf_head( InputStream *inputStream )
+void send_back_runbuf_head( FsmRun *fsmRun, InputStream *inputStream )
{
if ( inputStream->data == inputStream->runBuf->buf ) {
#ifdef COLM_LOG_PARSE
@@ -174,7 +174,7 @@ void send_back_runbuf_head( InputStream *inputStream )
/* Should only be sending back whole tokens/ignores, therefore the send back
* should never cross a buffer boundary. Either we slide back data, or we move to
* a previous buffer and slide back data. */
-void send_back_text( InputStream *inputStream, const char *data, long length )
+void send_back_text( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length )
{
#ifdef COLM_LOG_PARSE
if ( colm_log_parse ) {
@@ -185,7 +185,7 @@ void send_back_text( InputStream *inputStream, const char *data, long length )
if ( length == 0 )
return;
- send_back_runbuf_head( inputStream );
+ send_back_runbuf_head( fsmRun, inputStream );
/* If there is data in the current buffer then the whole send back
* should be in this buffer. */
@@ -269,7 +269,7 @@ void send_back_ignore( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *i
bool artificial = ignore->tree->flags & AF_ARTIFICIAL;
if ( head != 0 && !artificial )
- send_back_text( inputStream, string_data( head ), head->length );
+ send_back_text( fsmRun, inputStream, string_data( head ), head->length );
/* Check for reverse code. */
if ( ignore->tree->flags & AF_HAS_RCODE ) {
@@ -301,7 +301,7 @@ void send_back( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStr
if ( input->tree->flags & AF_NAMED ) {
/* Send back anything in the buffer that has not been parsed. */
- send_back_runbuf_head( inputStream );
+ send_back_runbuf_head( fsmRun, inputStream );
/* Send the named lang el back first, then send back any leading
* whitespace. */
@@ -310,7 +310,7 @@ void send_back( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStr
if ( !(input->tree->flags & AF_ARTIFICIAL) ) {
/* Push back the token data. */
- send_back_text( inputStream, string_data( input->tree->tokdata ),
+ send_back_text( fsmRun, inputStream, string_data( input->tree->tokdata ),
string_length( input->tree->tokdata ) );
}
@@ -421,11 +421,11 @@ void send_queued_tokens( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream
}
}
-Kid *make_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser, int id,
+Kid *make_token( PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, int id,
Head *tokdata, bool namedLangEl, int bindId )
{
/* Make the token object. */
- long objectLength = parser->tables->rtd->lelInfo[id].objectLength;
+ long objectLength = pdaRun->tables->rtd->lelInfo[id].objectLength;
Kid *attrs = alloc_attrs( fsmRun->prg, objectLength );
Kid *input = 0;
@@ -443,10 +443,10 @@ Kid *make_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser, int i
/* No children and ignores get added later. */
input->tree->child = attrs;
- LangElInfo *lelInfo = parser->tables->rtd->lelInfo;
+ LangElInfo *lelInfo = pdaRun->tables->rtd->lelInfo;
if ( lelInfo[id].numCaptureAttr > 0 ) {
for ( int i = 0; i < lelInfo[id].numCaptureAttr; i++ ) {
- CaptureAttr *ca = &parser->tables->rtd->captureAttr[lelInfo[id].captureAttr + i];
+ CaptureAttr *ca = &pdaRun->tables->rtd->captureAttr[lelInfo[id].captureAttr + i];
Head *data = string_alloc_full( fsmRun->prg,
fsmRun->mark[ca->mark_enter], fsmRun->mark[ca->mark_leave]
- fsmRun->mark[ca->mark_enter] );
@@ -458,7 +458,7 @@ Kid *make_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser, int i
/* If the item is bound then store it in the bindings array. */
if ( bindId > 0 ) {
- parser->bindings.push( input->tree );
+ pdaRun->bindings.push( input->tree );
tree_upref( input->tree );
}
@@ -676,7 +676,7 @@ void send_token( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pd
update_position( inputStream, inputStream->token, tokdata->length );
- Kid *input = make_token( inputStream, fsmRun, pdaRun, id, tokdata, false, 0 );
+ Kid *input = make_token( pdaRun, fsmRun, inputStream, id, tokdata, false, 0 );
send_handle_error( sp, pdaRun, fsmRun, inputStream, input );
}
@@ -843,7 +843,7 @@ void scanner_error( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun
}
}
-void parse( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun )
+void parse( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
pdaRun->init();
@@ -851,7 +851,7 @@ void parse( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun
/* Pull the current scanner from the parser. This can change during
* parsing due to inputStream pushes, usually for the purpose of includes.
* */
- int tokenId = scan_token( inputStream, fsmRun, pdaRun );
+ int tokenId = scan_token( pdaRun, fsmRun, inputStream );
/* Check for EOF. */
if ( tokenId == SCAN_EOF ) {
@@ -864,7 +864,7 @@ void parse( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun
/* Check for a named language element. */
if ( tokenId == SCAN_LANG_EL ) {
- send_named_lang_el( sp, inputStream, fsmRun, pdaRun );
+ send_named_lang_el( sp, pdaRun, fsmRun, inputStream );
continue;
}
@@ -900,13 +900,13 @@ void parse( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun
}
}
-void parse_frag( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun )
+void parse_frag( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
while ( true ) {
/* Pull the current scanner from the parser. This can change during
* parsing due to inputStream pushes, usually for the purpose of includes.
* */
- int tokenId = scan_token( inputStream, fsmRun, pdaRun );
+ int tokenId = scan_token( pdaRun, fsmRun, inputStream );
/* Check for EOF. */
if ( tokenId == SCAN_EOF )
@@ -914,7 +914,7 @@ void parse_frag( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pd
/* Check for a named language element. */
if ( tokenId == SCAN_LANG_EL ) {
- send_named_lang_el( sp, inputStream, fsmRun, pdaRun );
+ send_named_lang_el( sp, pdaRun, fsmRun, inputStream );
continue;
}
@@ -935,12 +935,12 @@ void parse_frag( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pd
}
}
-void parse_frag_finish( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun )
+void parse_frag_finish( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
send_eof( sp, inputStream, fsmRun, pdaRun );
}
-long scan_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun )
+long scan_token( PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream )
{
/* Init the scanner vars. */
fsmRun->act = 0;
@@ -969,7 +969,7 @@ long scan_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun )
fsmRun->peof = inputStream->deof;
fsmRun->tokstart = inputStream->token;
- fsm_execute( inputStream, fsmRun );
+ fsm_execute( fsmRun, inputStream );
inputStream->data = fsmRun->p;
inputStream->de = fsmRun->pe;
diff --git a/colm/fsmrun.h b/colm/fsmrun.h
index 8f140595..118fd6da 100644
--- a/colm/fsmrun.h
+++ b/colm/fsmrun.h
@@ -102,23 +102,24 @@ struct FsmRun
};
void exec_action( FsmRun *fsmRun, GenAction *genAction );
-void fsm_execute( InputStream *inputStream, FsmRun *fsmRun );
+void fsm_execute( FsmRun *fsmRun, InputStream *inputStream );
void init_input_stream( InputStream *in );
void send_queued_tokens( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
void send_handle_error( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, Kid *input );
Head *extract_match( Program *prg, InputStream *inputStream );
void send_back( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, Kid *input );
void queue_back( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, Kid *input );
-void parse( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser );
-void parse_frag( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser );
-void parse_frag_finish( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser );
-long scan_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *pdaRun );
+void parse( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
+void parse_frag( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
+void parse_frag_finish( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
+long scan_token( PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
Head *extract_prefix( Program *prg, FsmRun *fsmRun, InputStream *inputStream, long length );
-void send_back_text( InputStream *inputStream, const char *data, long length );
+void send_back_text( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length );
void inputStream( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length );
+void stream_push( FsmRun *fsmRun, InputStream *inputStream, const char *data, long length );
void undo_stream_push( FsmRun *fsmRun, InputStream *inputStream, long length );
-void send_named_lang_el( Tree **sp, InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser );
-Kid *make_token( InputStream *inputStream, FsmRun *fsmRun, PdaRun *parser, int id,
+void send_named_lang_el( Tree **sp, PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream );
+Kid *make_token( PdaRun *pdaRun, FsmRun *fsmRun, InputStream *inputStream, int id,
Head *tokdata, bool namedLangEl, int bindId );
#endif
diff --git a/colm/parsedata.cpp b/colm/parsedata.cpp
index 084cba3c..a3436e8e 100644
--- a/colm/parsedata.cpp
+++ b/colm/parsedata.cpp
@@ -1486,7 +1486,7 @@ void ParseData::parsePatterns()
repl->pdaRun = new PdaRun( &program,
pdaTables, repl->langEl->parserId, 0, false );
- parse( root, &in, &fsmRun, repl->pdaRun );
+ parse( root, repl->pdaRun, &fsmRun, &in );
//#ifdef COLM_LOG_COMPILE
//if ( colm_log_compile ) {
@@ -1506,7 +1506,7 @@ void ParseData::parsePatterns()
pat->pdaRun = new PdaRun( &program,
pdaTables, pat->langEl->parserId, 0, false );
- parse( root, &in, &fsmRun, pat->pdaRun );
+ parse( root, pat->pdaRun, &fsmRun, &in );
//#ifdef COLM_LOG_COMPILE
//if ( colm_log_compile ) {