diff options
-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; |