aboutsummaryrefslogtreecommitdiff
path: root/tools/js-optimizer.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-06 19:23:34 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-07 14:23:24 -0800
commitf0b6b3d2ad45a81e7d92d7491b38a3cad8a08ef5 (patch)
treeb3f55db088eea10116c76e0ef7530f5f4f2da50a /tools/js-optimizer.js
parentcdaf0e156e7eed0d8d591bddc143df55017dfb4f (diff)
make normalizeAsm not get confused when a var later has an unneeded 'var' before it
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r--tools/js-optimizer.js14
1 files changed, 12 insertions, 2 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index daa08fe5..78553771 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1259,8 +1259,18 @@ function normalizeAsm(func) {
var node = stats[i];
if (node[0] != 'var') break;
node[1].forEach(function(v) {
- data.vars[v[0]] = detectAsmCoercion(v[1]);
- v.length = 1; // make an un-assigning var
+ var name = v[0];
+ var value = v[1];
+ if (!(name in data.vars)) {
+ assert(value[0] == 'num' || (value[0] == 'unary-prefix' && value[2][0] == 'num')); // must be valid coercion no-op
+ data.vars[name] = detectAsmCoercion(value);
+ v.length = 1; // make an un-assigning var
+ } else {
+ // known var, just an unneeded 'var ' that when removed leaves an assign
+ assert(node[1].length == 1);
+ node[0] = 'stat';
+ node[1] = ['assign', true, ['name', name], value];
+ }
});
i++;
}