diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-11 21:08:06 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-11 21:08:06 -0700 |
commit | b1ad0fe49869321309a70bfac7913023b58a4150 (patch) | |
tree | 840609bc9d8d34c8ae049037849cd64aea91063c /tools/js-optimizer.js | |
parent | 6ee8575a3be5159d65942e61595924d5e7a4b93c (diff) |
registerize: define all vars once up front
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index d51c1c18..a354a236 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -1182,7 +1182,7 @@ function registerize(ast, conservative) { reg = freeRegs.pop(); } else { reg = nextReg++; - fullNames[reg] = 'r' + reg; + fullNames[reg] = 'r' + reg; // TODO: even smaller names } varRegs[name] = reg; } @@ -1223,8 +1223,33 @@ function registerize(ast, conservative) { } } }); + // Remove all vars + traverse(fun, function(node, type) { + if (type == 'var') { + var vars = node[1]; + if (vars.length > 1) { + var ret = ['stat', []]; + var curr = ret[1]; + for (var i = 0; i < vars.length-1; i++) { + curr[0] = 'seq'; + curr[1] = ['assign', true, ['name', vars[i][0]], vars[i][1]]; + if (i != vars.length-2) curr = curr[2] = []; + } + curr[2] = ['assign', true, ['name', vars[vars.length-1][0]], vars[vars.length-1][1]]; + return ret; + } else { + return ['assign', true, ['name', vars[0][0]], vars[0][1]]; + } + } + }); + vacuum(fun); + // Add vars at the beginning + var vars = []; + for (var i = 1; i < nextReg; i++) { + vars.push([fullNames[i]]); + } + getStatements(fun).unshift(['var', vars]); }); - //printErr('zz post: ' + dump(ast)); } // Passes table |