aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/runner.py2
-rw-r--r--tools/js-optimizer.js8
2 files changed, 9 insertions, 1 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 8ec4591a..b1a9e6b1 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -10842,7 +10842,7 @@ f.close()
for engine in JS_ENGINES:
out = run_js('test.js', engine=engine, stderr=PIPE, full_output=True)
self.assertContained(expected, out)
- #if engine == SPIDERMONKEY_ENGINE: self.validate_asmjs(out)
+ if engine == SPIDERMONKEY_ENGINE: self.validate_asmjs(out)
low = expected_ranges[outlining_limit][0]
seen = max(measure_funcs('test.js').values())
high = expected_ranges[outlining_limit][1]
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index c1ba41ec..5d883bc3 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -3291,6 +3291,14 @@ function outline(ast) {
}
// replace in stats
stats.splice.apply(stats, [start, end-start+1].concat(reps));
+ // if we just removed a final return from the original function, add one
+ var last = getStatements(func)[getStatements(func).length-1];
+ if (last[0] === 'stat') last = last[1];
+ if (last[0] !== 'return') {
+ if (allCodeInfo.hasReturnInt || allCodeInfo.hasReturnDouble) {
+ getStatements(func).push(['stat', ['return', makeAsmCoercion(['num', 0], allCodeInfo.hasReturnInt ? ASM_INT : ASM_DOUBLE)]]);
+ }
+ }
return [newFunc];
}