diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-06-03 14:40:15 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-06-03 14:40:15 -0700 |
commit | cafdc3cca8493da19187880d99a32f021f706ce6 (patch) | |
tree | f66f482e8b4339382076d78d90ee83e3b21e2ae9 /src/jsifier.js | |
parent | 931418568a219a93f04606615ef6e5b24d639536 (diff) |
refactoring in preparation for TYPED_ARRAYS==2 (disabled)
Diffstat (limited to 'src/jsifier.js')
-rw-r--r-- | src/jsifier.js | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index d1e608a1..13b8377f 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -169,7 +169,7 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { if (needsPostSet(value)) { // ident, or expression containing an ident ret.push({ intertype: 'GlobalVariablePostSet', - JS: 'IHEAP[' + getFastValue(item.ident, '+', i) + '] = ' + value + ';' + JS: makeSetValue(item.ident, i, value, 'i32', false, true) // ignore=true, since e.g. rtti and statics cause lots of safe_heap errors }); constant[i] = '0'; } @@ -682,11 +682,7 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { if (ident == '_llvm_va_start') { // varargs - we received a pointer to the varargs as a final 'extra' parameter var data = 'arguments[' + Framework.currItem.funcData.ident + '.length]'; - if (SAFE_HEAP) { - return 'SAFE_HEAP_STORE(' + params[0].ident + ', ' + data + ', null, ' + !checkSafeHeap() + ')'; - } else { - return 'IHEAP[' + params[0].ident + '] = ' + data; - } + return makeSetValue(params[0].ident, 0, data, 'void*'); } else if (ident == '_llvm_va_end') { return ';'; } @@ -694,6 +690,7 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { var func = Functions.currFunctions[ident]; var args = []; var varargs = []; + var varargsTypes = []; params.forEach(function(param, i) { var val = finalizeParam(param); @@ -702,13 +699,19 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { } else { varargs.push(val); varargs = varargs.concat(zeros(getNativeFieldSize(param.type)-1)); + varargsTypes.push(param.type); + varargsTypes = varargsTypes.concat(zeros(getNativeFieldSize(param.type)-1)); } }); args = args.map(indexizeFunctions); varargs = varargs.map(indexizeFunctions); if (func && func.hasVarArgs) { - varargs = makePointer('[' + varargs + ']', 0, 'ALLOC_STACK'); + if (varargs.length === 0) { + varargs = [0]; + varargsTypes = ['i32']; + } + varargs = makePointer('[' + varargs + ']', 0, 'ALLOC_STACK', varargsTypes); } if (getVarData(funcData, ident)) { |