diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-11-20 00:35:15 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-11-20 00:35:15 -0800 |
commit | dfe5f60e7c44d3f7fc7ac92e0ce6e76497319480 (patch) | |
tree | 17b297b308b65f7047162a602b5e308c890567f7 | |
parent | a1dce8a3413e8a72e4f2ecba4d6b4f771c8216e6 (diff) |
js optimizer fix, and remove assigns to undefined in library
-rw-r--r-- | src/library.js | 4 | ||||
-rw-r--r-- | tools/js-optimizer.js | 12 | ||||
-rw-r--r-- | tools/test-js-optimizer.js | 1 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/library.js b/src/library.js index 8c3740b3..277c4574 100644 --- a/src/library.js +++ b/src/library.js @@ -2326,9 +2326,9 @@ LibraryManager.library = { argSize = 4; break; default: - argSize = undefined; + argSize = null; } - if (argSize !== undefined) textIndex++; + if (argSize) textIndex++; next = {{{ makeGetValue(0, 'textIndex+1', 'i8') }}}; // Handle type specifier. diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index bc993eae..5aeee636 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -160,7 +160,6 @@ function unGlobalize(ast) { // This pass assumes that unGlobalize has been run, so undefined // is now explicit. function removeAssignsToUndefined(ast) { - // TODO: in vars too traverse(ast, function(node, type) { if (type == 'assign' && jsonCompare(node[3], ['unary-prefix', 'void', ['num', 0]])) { return emptyNode(); @@ -173,6 +172,17 @@ function removeAssignsToUndefined(ast) { }); } }); + // cleanup (|x = y = void 0| leaves |x = ;| right now) + var modified = true; + while (modified) { + modified = false; + traverse(ast, function(node, type) { + if (type == 'assign' && jsonCompare(node[3], emptyNode())) { + modified = true; + return emptyNode(); + } + }); + } } // Main diff --git a/tools/test-js-optimizer.js b/tools/test-js-optimizer.js index 042f4cf9..05e574f9 100644 --- a/tools/test-js-optimizer.js +++ b/tools/test-js-optimizer.js @@ -7,6 +7,7 @@ function abc() { var fleefl; cheez = 10; fleefl = x; + fleefl = cheez = x; var waka = x, flake = x, marfoosh = x; var waka2 = 5, flake2 = x, marfoosh2 = x; var waka3 = x, flake3 = 5, marfoosh3 = x; |