diff options
author | alon@honor <none@none> | 2010-08-31 20:16:12 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-08-31 20:16:12 -0700 |
commit | da7a906536a26dca22190c870aaa96588dc92dec (patch) | |
tree | 2048af49a9bf9e730bab2852dcb0e2699d211c77 | |
parent | 0fab1ac3a4c32aaf48a97c59820bd2fedab159d7 (diff) |
optimize reintegrator
-rw-r--r-- | src/enzymatic.js | 7 | ||||
-rw-r--r-- | src/parser.js | 17 |
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' |