diff options
author | Adrian Thurston <thurston@colm.net> | 2017-07-27 12:11:13 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2017-07-27 12:11:13 -0400 |
commit | 3f74fc17cee81774ddcc29c0a3560f81f7b60b7d (patch) | |
tree | dd3cc86a2cbc0b6eceb2755f084800718842fb1c /src/loadcolm.cc | |
parent | 1395ab646772f3c37e3fbad207d9f12a9d3f3140 (diff) | |
download | colm-3f74fc17cee81774ddcc29c0a3560f81f7b60b7d.tar.gz |
added a read_reduce statement to call postfix reducer
Triggers the generation of the reducer. Accepts a stream.
Diffstat (limited to 'src/loadcolm.cc')
-rw-r--r-- | src/loadcolm.cc | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/loadcolm.cc b/src/loadcolm.cc index cd2200f5..d49a5177 100644 --- a/src/loadcolm.cc +++ b/src/loadcolm.cc @@ -1800,7 +1800,7 @@ struct LoadColm ConsItemList *list = walkAccumulate( codeFactor.accumulate() ); expr = parseCmd( codeFactor.PARSE().loc(), false, false, objField, - typeRef, init, list, used, false, "" ); + typeRef, init, list, used, false, false, "" ); break; } case code_factor::ParseTree: { @@ -1812,7 +1812,7 @@ struct LoadColm ConsItemList *list = walkAccumulate( codeFactor.accumulate() ); expr = parseCmd( codeFactor.PARSE_TREE().loc(), true, false, objField, - typeRef, init, list, used, false, "" ); + typeRef, init, list, used, false, false, "" ); break; } case code_factor::ParseStop: { @@ -1824,7 +1824,7 @@ struct LoadColm ConsItemList *list = walkAccumulate( codeFactor.accumulate() ); expr = parseCmd( codeFactor.PARSE_STOP().loc(), false, true, objField, - typeRef, init, list, used, false, "" ); + typeRef, init, list, used, false, false, "" ); break; } case code_factor::Reduce: { @@ -1838,7 +1838,21 @@ struct LoadColm ConsItemList *list = walkAccumulate( codeFactor.accumulate() ); expr = parseCmd( codeFactor.REDUCE().loc(), false, false, 0, - typeRef, init, list, used, true, reducer ); + typeRef, init, list, used, true, false, reducer ); + break; + } + case code_factor::ReadReduce: { + /* The reducer name. */ + String reducer = codeFactor.id().data(); + + /* The type we are parsing. */ + type_ref typeRefTree = codeFactor.type_ref(); + TypeRef *typeRef = walkTypeRef( typeRefTree ); + FieldInitVect *init = walkOptFieldInit( codeFactor.opt_field_init() ); + ConsItemList *list = walkAccumulate( codeFactor.accumulate() ); + + expr = parseCmd( codeFactor.READ_REDUCE().loc(), false, false, 0, + typeRef, init, list, used, true, true, reducer ); break; } case code_factor::Cons: { |