diff options
author | Adrian Thurston <thurston@complang.org> | 2009-11-11 23:15:35 +0000 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2009-11-11 23:15:35 +0000 |
commit | cf7457af1c9dcbf6796120e3f55eaba82932cd9e (patch) | |
tree | 9ef4fead481886c6f0dc71e243327904ea9de4b5 | |
parent | 43af9dedf317d02429734c2666b08df394a4bf6e (diff) | |
download | colm-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.cpp | 14 | ||||
-rw-r--r-- | colm/ctinput.cpp | 8 | ||||
-rw-r--r-- | colm/fsmcodegen.cpp | 4 | ||||
-rw-r--r-- | colm/fsmexec.cpp | 2 | ||||
-rw-r--r-- | colm/fsmrun.cpp | 42 | ||||
-rw-r--r-- | colm/fsmrun.h | 17 | ||||
-rw-r--r-- | colm/parsedata.cpp | 4 |
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 ) { |