summaryrefslogtreecommitdiff
path: root/src/loadcolm.cc
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@colm.net>2017-07-27 12:11:13 -0400
committerAdrian Thurston <thurston@colm.net>2017-07-27 12:11:13 -0400
commit3f74fc17cee81774ddcc29c0a3560f81f7b60b7d (patch)
treedd3cc86a2cbc0b6eceb2755f084800718842fb1c /src/loadcolm.cc
parent1395ab646772f3c37e3fbad207d9f12a9d3f3140 (diff)
downloadcolm-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.cc22
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: {