summaryrefslogtreecommitdiff
path: root/src/loadcolm.cc
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-10-08 18:15:39 -0400
committerAdrian Thurston <thurston@complang.org>2015-10-08 18:15:39 -0400
commita16df3c2ed1163691eb1af042a1797d1a4895441 (patch)
tree6eee0759cb4ca03798af5e757a249965b156bef0 /src/loadcolm.cc
parentccaa108e29f630cea0033d6719f524625d1768b0 (diff)
downloadcolm-a16df3c2ed1163691eb1af042a1797d1a4895441.tar.gz
reduction actions: add loc reference, elim duplicate labels
Diffstat (limited to 'src/loadcolm.cc')
-rw-r--r--src/loadcolm.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/loadcolm.cc b/src/loadcolm.cc
index 7dd21141..4829d519 100644
--- a/src/loadcolm.cc
+++ b/src/loadcolm.cc
@@ -2353,12 +2353,31 @@ struct LoadColm
rti->type = ReduceTextItem::LhsRef;
list.append( rti );
}
- else if ( item.RED_RHS() != 0 ) {
+ else if ( item.RED_RHS_REF() != 0 ) {
ReduceTextItem *rti = new ReduceTextItem;
rti->type = ReduceTextItem::RhsRef;
- rti->txt = item.RED_RHS().text().c_str();
+ rti->txt = item.RED_RHS_REF().text().c_str();
list.append( rti );
}
+ else if ( item.RED_RHS_LOC() != 0 ) {
+ ReduceTextItem *rti = new ReduceTextItem;
+ rti->type = ReduceTextItem::RhsLoc;
+ rti->txt = item.RED_RHS_LOC().text().c_str();
+ list.append( rti );
+ }
+ else if ( item.RED_OPEN() != 0 ) {
+ ReduceTextItem *open = new ReduceTextItem;
+ open->type = ReduceTextItem::Txt;
+ open->txt = "{";
+ list.append( open );
+
+ walkRedItemList( item.HostItems(), list );
+
+ ReduceTextItem *close = new ReduceTextItem;
+ close->type = ReduceTextItem::Txt;
+ close->txt = "}";
+ list.append( close );
+ }
else {
if ( list.length() > 0 && list.tail->type == ReduceTextItem::Txt ) {
std::string txt = item.text();