aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-08-31 20:16:12 -0700
committeralon@honor <none@none>2010-08-31 20:16:12 -0700
commitda7a906536a26dca22190c870aaa96588dc92dec (patch)
tree2048af49a9bf9e730bab2852dcb0e2699d211c77 /src
parent0fab1ac3a4c32aaf48a97c59820bd2fedab159d7 (diff)
optimize reintegrator
Diffstat (limited to 'src')
-rw-r--r--src/enzymatic.js7
-rw-r--r--src/parser.js17
2 files changed, 16 insertions, 8 deletions
diff --git a/src/enzymatic.js b/src/enzymatic.js
index d1889d49..c0ef3b69 100644
--- a/src/enzymatic.js
+++ b/src/enzymatic.js
@@ -154,5 +154,12 @@ Zyme.prototype = {
items.forEach(function(item) { ret = ret.concat(this.processItem(item)) }, this);
return ret;
},
+ processPairs: function(items, func) {
+ var ret = [];
+ for (var i = 0; i < items.length; i += 2) {
+ ret = ret.concat(func(items[i], items[i+1]));
+ }
+ return ret;
+ },
};
diff --git a/src/parser.js b/src/parser.js
index c28aeeeb..7ee4361b 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -581,24 +581,25 @@ function intertyper(data) {
// place back in parents
substrate.addZyme('Reintegrator', {
select: function(items) {
+ var ret = [];
for (var i = 0; i < items.length; i++) {
if (items[i].parentSlot && items[i].intertype) {
for (var j = 0; j < items.length; j++) {
if (items[j].lineNum == items[i].parentLineNum) {
- return [items[j], items[i]];
+ ret = ret.concat([items[j], items[i]]);
}
}
}
}
- return [];
+ return ret;
},
process: function(items) {
- var parent = items[0];
- var child = items[1];
- parent[child.parentSlot] = child;
- parent.__result__ = true;
- delete child.parentLineNum;
- return [parent];
+ return Zyme.prototype.processPairs(items, function(parent, child) {
+ parent[child.parentSlot] = child;
+ parent.__result__ = true;
+ delete child.parentLineNum;
+ return [parent];
+ });
}
});
// 'load'