diff options
-rw-r--r-- | tests/runner.py | 9 | ||||
-rw-r--r-- | tools/eliminator/eliminator-test-output.js | 18 | ||||
-rw-r--r-- | tools/eliminator/eliminator-test.js | 20 | ||||
-rw-r--r-- | tools/eliminator/eliminator.coffee | 2 |
4 files changed, 42 insertions, 7 deletions
diff --git a/tests/runner.py b/tests/runner.py index f97934e9..cd87d3d3 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -163,6 +163,13 @@ class RunnerCore(unittest.TestCase): def run_native(self, filename, args): Popen([filename+'.native'] + args, stdout=PIPE, stderr=STDOUT).communicate()[0] + def assertIdentical(self, x, y): + if x != y: + raise Exception("Expected to have '%s' == '%s', diff:\n\n%s" % ( + limit_size(x), limit_size(y), + limit_size(''.join([a.rstrip()+'\n' for a in difflib.unified_diff(x.split('\n'), y.split('\n'), fromfile='expected', tofile='actual')])) + )) + def assertContained(self, value, string): if type(value) is not str: value = value() # lazy loading if type(string) is not str: string = string() @@ -4178,7 +4185,7 @@ TT = %s input = open(path_from_root('tools', 'eliminator', 'eliminator-test.js')).read() expected = open(path_from_root('tools', 'eliminator', 'eliminator-test-output.js')).read() output = Popen([COFFEESCRIPT, VARIABLE_ELIMINATOR], stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate(input)[0] - self.assertEquals(output, expected) + self.assertIdentical(expected, output) else: # Benchmarks. Run them with argument |benchmark|. To run a specific test, do diff --git a/tools/eliminator/eliminator-test-output.js b/tools/eliminator/eliminator-test-output.js index 2324124e..b7a983cc 100644 --- a/tools/eliminator/eliminator-test-output.js +++ b/tools/eliminator/eliminator-test-output.js @@ -5,7 +5,7 @@ function f() { HEAP[123] = (GLOB[1] + 1) / 2; } -var g = (function(a1, a2) { +function g(a1, a2) { var a = 1; var c = a * 2 - 1; @@ -39,7 +39,7 @@ var g = (function(a1, a2) { unquoted: 3, 4: 5 }; -}); +} function h() { var out; bar(hello); @@ -91,3 +91,17 @@ function py() { var $8 = HEAP[__PyThreadState_Current] + 12; HEAP[$8] = $7; } +function otherPy() { + var $4 = HEAP[__PyThreadState_Current]; + var $5 = $4 + 12; + var $7 = HEAP[$5] + 1; + var $8 = $4 + 12; + HEAP[$8] = $7; +} +var anon = (function(x) { + var $4 = HEAP[__PyThreadState_Current]; + var $5 = $4 + 12; + var $7 = HEAP[$5] + 1; + var $8 = $4 + 12; + HEAP[$8] = $7; +}); diff --git a/tools/eliminator/eliminator-test.js b/tools/eliminator/eliminator-test.js index d3ee88cb..681b6cf7 100644 --- a/tools/eliminator/eliminator-test.js +++ b/tools/eliminator/eliminator-test.js @@ -5,7 +5,7 @@ function f() { var z = y / 2; HEAP[123] = z; } -var g = function (a1, a2) { +function g(a1, a2) { var a = 1; var b = a * 2; var c = b - 1; @@ -39,7 +39,7 @@ var g = function (a1, a2) { unquoted: 3, 4: 5 }; -}; +} function h() { var out; bar(hello); @@ -91,5 +91,19 @@ function py() { var $8 = $4 + 12; HEAP[$8] = $7; } -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["f", "g", "h"] +function otherPy() { + var $4 = HEAP[__PyThreadState_Current]; + var $5 = $4 + 12; + var $7 = HEAP[$5] + 1; + var $8 = $4 + 12; + HEAP[$8] = $7; +} +var anon = function(x) { + var $4 = HEAP[__PyThreadState_Current]; + var $5 = $4 + 12; + var $7 = HEAP[$5] + 1; + var $8 = $4 + 12; + HEAP[$8] = $7; +} +// EMSCRIPTEN_GENERATED_FUNCTIONS: ["f", "g", "h", "py"] diff --git a/tools/eliminator/eliminator.coffee b/tools/eliminator/eliminator.coffee index 891718e2..c6de8690 100644 --- a/tools/eliminator/eliminator.coffee +++ b/tools/eliminator/eliminator.coffee @@ -113,7 +113,7 @@ class Eliminator # @returns: The number of variables eliminated, or undefined if skipped. run: -> # Our optimization does not account for closures. - if not @isGenerated then return undefined + if not @isGenerated() then return undefined @calculateBasicVarStats() @analyzeInitialValues() |