diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-16 14:37:13 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-16 14:37:13 -0700 |
commit | a7f046807762d234b49f28e47f53d97c8d379e00 (patch) | |
tree | bf4e6a803d8b988c688afe5c882d82c6753008ec /tools/js-optimizer.js | |
parent | a9944696a7d16fe0acca00c901821cb01e0aaa1c (diff) |
fix registerize bug with freeing variables from the wrong loops
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 59492dbd..a9704fe4 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -1231,7 +1231,7 @@ function registerize(ast) { var freeRegs = []; var nextReg = 1; var fullNames = {}; - var loopRegs = { 1: [] }; // for each loop nesting level, the list of bound variables + var loopRegs = {}; // for each loop nesting level, the list of bound variables var loops = 0; // 0 is toplevel, 1 is first loop, etc var saved = 0; var activeOptimizables = {}; @@ -1262,12 +1262,9 @@ function registerize(ast) { freeRegs.push(reg); } else { // when the relevant loop is exited, we will free the register - if (optimizables[name]) { - if (!loopRegs[loops]) loopRegs[loops] = []; - loopRegs[loops].push(reg); - } else { - loopRegs[1].push(reg); - } + var releventLoop = optimizables[name] ? (optimizableLoops[name] || 1) : 1; + if (!loopRegs[releventLoop]) loopRegs[releventLoop] = []; + loopRegs[releventLoop].push(reg); } } return true; |