diff options
author | max99x <max99x@gmail.com> | 2011-08-25 13:22:22 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-08-25 13:22:22 +0300 |
commit | d4ff97f04d704be111004b2ced8c2dc0e9be8681 (patch) | |
tree | 826a6cf57815189f9687907080200136ffaa9863 | |
parent | 19708c13452e1e72318e0205d4e7a1f128eb52aa (diff) |
JSifier and Intertyper changes to support external varargs functions.
-rw-r--r-- | src/intertyper.js | 4 | ||||
-rw-r--r-- | src/jsifier.js | 17 |
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 { |