aboutsummaryrefslogtreecommitdiff
path: root/src/parser.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.js')
-rw-r--r--src/parser.js21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/parser.js b/src/parser.js
index beb66ac9..491e31f5 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -141,15 +141,20 @@ function splitTokenList(tokens) {
function makeSplitter(parentSlot, parentSlotValue, parentUnrequiredSlot, childSlot, copySlots) {
return {
selectItem: function(item) { return item[parentSlot] == parentSlotValue && !item[parentUnrequiredSlot] && item[childSlot] !== null },
- processItem: function(parent) {
- var child = parent[childSlot];
- parent[childSlot] = null;
- child.parentUid = parent.__uid__;
- child.parentSlot = childSlot;
- child.lineNum = parent.lineNum; // Debugging
+ process: function(parents) {
if (!copySlots) copySlots = [];
- copySlots.forEach(function(slot) { child[slot] = parent[slot] });
- return [parent, child];
+ var ret = parents.slice(0);
+ for (var i = 0; i < parents.length; i++) {
+ var parent = parents[i];
+ var child = parent[childSlot];
+ parent[childSlot] = null;
+ child.parentUid = parent.__uid__;
+ child.parentSlot = childSlot;
+ child.lineNum = parent.lineNum; // Debugging
+ copySlots.forEach(function(slot) { child[slot] = parent[slot] });
+ ret.push(child);
+ }
+ return ret;
},
};
}