aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/intertyper.js4
-rw-r--r--src/jsifier.js17
2 files changed, 15 insertions, 6 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 794444d3..1db3cf88 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -803,13 +803,13 @@ function intertyper(data, parseFunctions, baseLineNum) {
intertype: 'functionStub',
ident: toNiceIdent(item.tokens[2].text),
returnType: item.tokens[1],
- params: item.tokens[3].item.tokens,
+ params: parseParamTokens(item.tokens[3].item.tokens),
hasVarArgs: false,
lineNum: item.lineNum
};
for (var i = 0; i < ret.params.length; i++) {
- if (ret.params[i].text == '...') {
+ if (ret.params[i].intertype == 'varargs') {
ret.hasVarArgs = true;
break;
}
diff --git a/src/jsifier.js b/src/jsifier.js
index 76e4ec9e..ff532783 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -41,7 +41,8 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
var GLOBAL_VARIABLES = !mainPass ? givenGlobalVariables : data.globalVariables;
- Functions.currFunctions = !mainPass ? givenFunctions : {};
+ Functions.currFunctions = !mainPass ? givenFunctions.currFunctions : {};
+ Functions.currExternalFunctions = !mainPass ? givenFunctions.currExternalFunctions : {};
// Now that first-pass analysis has completed (so we have basic types, etc.), we can get around to handling unparsedFunctions
(!mainPass ? data.functions : data.unparsedFunctions.concat(data.functions)).forEach(function(func) {
@@ -53,11 +54,18 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
};
});
+ data.functionStubs.forEach(function(func) {
+ Functions.currExternalFunctions[func.ident] = {
+ hasVarArgs: func.hasVarArgs,
+ numParams: func.params && func.params.length
+ };
+ });
+
for (var i = 0; i < data.unparsedFunctions.length; i++) {
var func = data.unparsedFunctions[i];
dprint('unparsedFunctions', '====================\n// Processing |' + func.ident + '|, ' + i + '/' + data.unparsedFunctions.length);
//var t = Date.now();
- func.JS = JSify(analyzer(intertyper(func.lines, true, func.lineNum-1)), true, Functions.currFunctions, GLOBAL_VARIABLES);
+ func.JS = JSify(analyzer(intertyper(func.lines, true, func.lineNum-1)), true, Functions, GLOBAL_VARIABLES);
//t = (Date.now()-t)/1000;
//dprint('unparsedFunctions', 'unparsedFunction took ' + t + ' seconds.');
delete func.lines; // clean up memory as much as possible
@@ -759,7 +767,8 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
return ';';
}
- var func = Functions.currFunctions[ident];
+ var func = Functions.currFunctions[ident] || Functions.currExternalFunctions[ident];
+
var args = [];
var argsTypes = [];
var varargs = [];
@@ -767,7 +776,7 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
params.forEach(function(param, i) {
var val = finalizeParam(param);
- if (!func || !func.hasVarArgs || i < func.numParams-1) { // unrecognized functions (like library ones) cannot have varargs
+ if (!func || !func.hasVarArgs || i < func.numParams-1) {
args.push(val);
argsTypes.push(param.type);
} else {