aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/runner.py9
-rw-r--r--tools/eliminator/eliminator-test-output.js18
-rw-r--r--tools/eliminator/eliminator-test.js20
-rw-r--r--tools/eliminator/eliminator.coffee2
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()