aboutsummaryrefslogtreecommitdiff
path: root/src/parser.js
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-09-11 14:15:46 -0700
committeralon@honor <none@none>2010-09-11 14:15:46 -0700
commitac805ebf0af3ad7873dbed0f0f28e5f6d481c464 (patch)
tree29d01717b6c05cfb43749fd6a88610079447dc74 /src/parser.js
parentc91d6e20014b124c32d29d301e39a5782570300e (diff)
Catch a corner case with 0 in varargs
Diffstat (limited to 'src/parser.js')
-rw-r--r--src/parser.js6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/parser.js b/src/parser.js
index 94be1dc6..e4beee08 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -2447,10 +2447,12 @@ function JSify(data) {
function makeFunctionCall(ident, params) {
// Special cases
if (ident == '_llvm_va_start') {
+ var args = 'Array.prototype.slice.call(arguments, __numArgs__)';
+ var data = 'Pointer_make([' + args + '.length].concat(' + args + '), 0)';
if (SAFE_HEAP) {
- return 'SAFE_HEAP_STORE(' + params[0].ident + ', Pointer_make(Array.prototype.slice.call(arguments, __numArgs__).concat([0]), 0))';
+ return 'SAFE_HEAP_STORE(' + params[0].ident + ', ' + data + ', 0)';
} else {
- return 'HEAP[' + params[0].ident + '] = Pointer_make(Array.prototype.slice.call(arguments, __numArgs__).concat([0]), 0)';
+ return 'HEAP[' + params[0].ident + '] = ' + data;
}
} else if (ident == '_llvm_va_end') {
return ';'