diff options
Diffstat (limited to 'src/jsifier.js')
-rw-r--r-- | src/jsifier.js | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index c19eda3a..1fd4a790 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -207,6 +207,24 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { } var constant = null; if (item.external) { + // Import external global variables from the library if available. + if (LibraryManager.library[item.ident.slice(1)] && + LibraryManager.library[item.ident.slice(1)].length && + !BUILD_AS_SHARED_LIB) { + var val = LibraryManager.library[item.ident.slice(1)]; + val = val.concat(zeros(generateStructTypes(item.type).length-1)); + val = JSON.stringify(val); + ret.push({ + intertype: 'GlobalVariablePostSet', + JS: item.ident + '=' + makePointer(val, null, 'ALLOC_STATIC', item.type) + ';' + }); + if (LibraryManager.library[item.ident.slice(1) + '__postset']) { + ret.push({ + intertype: 'GlobalVariablePostSet', + JS: LibraryManager.library[item.ident.slice(1) + '__postset'] + }); + } + } return ret; } else { function needsPostSet(value) { @@ -784,10 +802,11 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { var argsTypes = []; var varargs = []; var varargsTypes = []; + var useJSArgs = (ident.slice(1) + '__jsargs') in LibraryManager.library; params.forEach(function(param, i) { var val = finalizeParam(param); - if (!func || !func.hasVarArgs || i < func.numParams-1) { + if (!func || !func.hasVarArgs || i < func.numParams-1 || useJSArgs) { args.push(val); argsTypes.push(param.type); } else { @@ -801,7 +820,7 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) { args = args.map(function(arg, i) { return indexizeFunctions(arg, argsTypes[i]) }); varargs = varargs.map(function(vararg, i) { return vararg === 0 ? 0 : indexizeFunctions(vararg, varargsTypes[i]) }); - if (func && func.hasVarArgs) { + if (func && func.hasVarArgs && !useJSArgs) { if (varargs.length === 0) { varargs = [0]; varargsTypes = ['i32']; |