aboutsummaryrefslogtreecommitdiff
path: root/tools/js-optimizer.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-17 13:43:14 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-17 13:43:14 -0700
commit82f09254a7386bae7fde93f9ef381af5110c70e5 (patch)
tree84430f4c77064fe279d51e83b82576994ccc1ec8 /tools/js-optimizer.js
parentf02de71371a80e00275845a9a9b3f5f92d22a100 (diff)
do not overlap the normal C stack with outliner-spilled variables
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r--tools/js-optimizer.js12
1 files changed, 9 insertions, 3 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index ad98a3f2..798fa855 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1699,6 +1699,11 @@ function getStackBumpNode(ast) {
return found;
}
+function getStackBumpSize(ast) {
+ var node = getStackBumpNode(ast);
+ return node ? node[3][2][3][1] : 0;
+}
+
// Very simple 'registerization', coalescing of variables into a smaller number,
// as part of minification. Globals-level minification began in a previous pass,
// we receive extraInfo which tells us how to rename globals. (Only in asm.js.)
@@ -3007,13 +3012,14 @@ function outline(ast) {
stack.push(name);
}
asmData.stackPos = {};
+ var stackSize = getStackBumpSize(func);
for (var i = 0; i < stack.length; i++) {
- asmData.stackPos[stack[i]] = i*8;
+ asmData.stackPos[stack[i]] = stackSize + i*8;
}
// Reserve an extra two spots: one for control flow var, the other for control flow data
asmData.extraStackSize = (stack.length + 2)*8;
- asmData.controlStackPos = asmData.extraStackSize - 16;
- asmData.controlDataStackPos = asmData.extraStackSize - 8;
+ asmData.controlStackPos = stackSize + asmData.extraStackSize - 16;
+ asmData.controlDataStackPos = stackSize + asmData.extraStackSize - 8;
asmData.splitCounter = 0;
}