diff options
author | Adrian Thurston <thurston@colm.net> | 2018-07-02 15:22:08 +0700 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2018-07-02 15:22:08 +0700 |
commit | e87efd2f55958dc4f915890091ecf436d33d8c4f (patch) | |
tree | 39e8c902ace9bc929469892a7251b9b83e2f48b7 /src/ctinput.cc | |
parent | 3ce0e39214953549c3da7bc6125afb364b4dd310 (diff) | |
download | colm-e87efd2f55958dc4f915890091ecf436d33d8c4f.tar.gz |
use stream_impl_ct directly
Don't put it behind a stream_impl_seq
Diffstat (limited to 'src/ctinput.cc')
-rw-r--r-- | src/ctinput.cc | 68 |
1 files changed, 60 insertions, 8 deletions
diff --git a/src/ctinput.cc b/src/ctinput.cc index 77b4ec9c..cbc62b29 100644 --- a/src/ctinput.cc +++ b/src/ctinput.cc @@ -54,6 +54,7 @@ struct stream_impl_ct struct ConsItem *cons_item; char eof_sent; + char eof; int offset; }; @@ -118,7 +119,7 @@ int inputStreamPatternGetParseBlock( struct colm_program *prg, struct stream_imp while ( true ) { if ( buf == 0 ) - return INPUT_EOD; + return INPUT_EOF; if ( buf->form == PatternItem::TypeRefForm ) return INPUT_LANG_EL; @@ -247,6 +248,46 @@ int inputStreamPatternUndoConsumeData( struct colm_program *prg, struct stream_i return length; } +void pat_stream_set_eof( struct colm_program *prg, struct stream_impl_ct *si ) +{ + si->eof = true; +} + +void pat_stream_unset_eof( struct colm_program *prg, struct stream_impl_ct *si ) +{ +// if ( is_source_stream( si ) ) { +// struct stream_impl_data *sid = (struct stream_impl_data*)si->queue->si; +// sid->eof = false; +// } +// else { + si->eof = false; +// } +} + +void repl_stream_set_eof( struct colm_program *prg, struct stream_impl_ct *si ) +{ + si->eof = true; +} + +void repl_stream_unset_eof( struct colm_program *prg, struct stream_impl_ct *si ) +{ +// if ( is_source_stream( si ) ) { +// struct stream_impl_data *sid = (struct stream_impl_data*)si->queue->si; +// sid->eof = false; +// } +// else { + si->eof = false; +// } +} + +void pat_transfer_loc_seq( struct colm_program *prg, location_t *loc, struct stream_impl_ct *ss ) +{ + loc->name = ss->name; + loc->line = ss->line; + loc->column = ss->column; + loc->byte = ss->byte; +} + stream_funcs_ct patternFuncs = { &inputStreamPatternGetParseBlock, @@ -260,9 +301,12 @@ stream_funcs_ct patternFuncs = /* unused */ 0, &inputStreamPatternUndoConsumeLangEl, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 0, + + &pat_stream_set_eof, &pat_stream_unset_eof, + + 0, 0, 0, 0, 0, 0, /* prepend. */ + 0, 0, 0, 0, 0, 0, /* append. */ &inputStreamPatternDestructor, @@ -270,6 +314,8 @@ stream_funcs_ct patternFuncs = &inputStreamGetEofSent, &inputStreamSetEofSent, + + &pat_transfer_loc_seq, }; @@ -327,7 +373,7 @@ int inputStreamConsGetParseBlock( struct colm_program *prg, struct stream_impl_c while ( true ) { if ( buf == 0 ) - return INPUT_EOD; + return INPUT_EOF; if ( buf->type == ConsItem::ExprType || buf->type == ConsItem::LiteralType ) return INPUT_LANG_EL; @@ -416,6 +462,7 @@ void inputStreamConsUndoConsumeLangEl( struct colm_program *prg, struct stream_i ss->offset = ss->cons_item->data.length(); } + int inputStreamConsConsumeData( struct colm_program *prg, struct stream_impl_ct *ss, int length, location_t *loc ) { int consumed = 0; @@ -482,9 +529,12 @@ stream_funcs_ct replFuncs = /* unused. */ 0, &inputStreamConsUndoConsumeLangEl, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 0, + + &repl_stream_set_eof, &repl_stream_unset_eof, + + 0, 0, 0, 0, 0, 0, /* prepend. */ + 0, 0, 0, 0, 0, 0, /* append. */ &inputStreamConsDestructor, @@ -492,6 +542,8 @@ stream_funcs_ct replFuncs = &inputStreamGetEofSent, &inputStreamSetEofSent, + + &pat_transfer_loc_seq, }; void pushBinding( pda_run *pdaRun, parse_tree_t *parseTree ) |