aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-05 13:47:07 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-07 14:23:23 -0800
commitcd8d5c1f7f73143894efbfc0ff4c1a83606e57ee (patch)
tree9710404e03988c4f6a3e5cc2db5a46c3434d1940
parentb68810bdeed7f07c6d7787e2b5c8e50eed1406c4 (diff)
another eliminateAsm bug+testcase
-rw-r--r--tools/eliminator/asm-eliminator-test-output.js14
-rw-r--r--tools/eliminator/asm-eliminator-test.js16
-rw-r--r--tools/js-optimizer.js2
3 files changed, 30 insertions, 2 deletions
diff --git a/tools/eliminator/asm-eliminator-test-output.js b/tools/eliminator/asm-eliminator-test-output.js
index e744b847..15d3a74c 100644
--- a/tools/eliminator/asm-eliminator-test-output.js
+++ b/tools/eliminator/asm-eliminator-test-output.js
@@ -50,4 +50,18 @@ function _segment_holding($addr) {
return $_0;
}
}
+function __ZN5identC2EiPKcPci($this, $n, $a) {
+ $this = $this | 0;
+ $n = $n | 0;
+ $a = $a | 0;
+ HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0;
+ HEAP32[($this + 4 & 16777215) >> 2] = 5;
+ HEAP32[($this + 8 & 16777215) >> 2] = $n;
+ HEAP32[($this + 20 & 16777215) >> 2] = 2147483647;
+ HEAP32[($this + 24 & 16777215) >> 2] = 0;
+ HEAP32[($this + 28 & 16777215) >> 2] = $a;
+ HEAP32[($this + 32 & 16777215) >> 2] = 0;
+ HEAP32[($this + 40 & 16777215) >> 2] = 1;
+ return;
+}
diff --git a/tools/eliminator/asm-eliminator-test.js b/tools/eliminator/asm-eliminator-test.js
index 6e006d46..67cdf2a0 100644
--- a/tools/eliminator/asm-eliminator-test.js
+++ b/tools/eliminator/asm-eliminator-test.js
@@ -69,5 +69,19 @@ function _segment_holding($addr) {
return $_0;
}
}
-// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding"]
+function __ZN5identC2EiPKcPci($this, $n, $a) {
+ $this = $this | 0;
+ $n = $n | 0;
+ $a = $a | 0;
+ HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0;
+ HEAP32[($this + 4 & 16777215) >> 2] = 5;
+ HEAP32[($this + 8 & 16777215) >> 2] = $n;
+ HEAP32[($this + 20 & 16777215) >> 2] = 2147483647;
+ HEAP32[($this + 24 & 16777215) >> 2] = 0;
+ HEAP32[($this + 28 & 16777215) >> 2] = $a;
+ HEAP32[($this + 32 & 16777215) >> 2] = 0;
+ HEAP32[($this + 40 & 16777215) >> 2] = 1;
+ return;
+}
+// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding", "__ZN5identC2EiPKcPci"]
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 33baa821..0697cdb9 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1230,7 +1230,7 @@ function normalizeAsm(func) {
var i = 0;
while (i < stats.length) {
var node = stats[i];
- if (node[0] != 'stat' || node[1][0] != 'assign') break;
+ if (node[0] != 'stat' || node[1][0] != 'assign' || node[1][2][0] != 'name') break;
node = node[1];
data.params[node[2][1]] = detectAsmCoercion(node[3]);
stats[i] = emptyNode();