diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-12-06 19:23:34 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-12-07 14:23:24 -0800 |
commit | f0b6b3d2ad45a81e7d92d7491b38a3cad8a08ef5 (patch) | |
tree | b3f55db088eea10116c76e0ef7530f5f4f2da50a /tools/js-optimizer.js | |
parent | cdaf0e156e7eed0d8d591bddc143df55017dfb4f (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.js | 14 |
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++; } |