From a7f046807762d234b49f28e47f53d97c8d379e00 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 16 May 2012 14:37:13 -0700 Subject: fix registerize bug with freeing variables from the wrong loops --- tools/js-optimizer.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'tools/js-optimizer.js') 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; -- cgit v1.2.3-18-g5258