aboutsummaryrefslogtreecommitdiff
path: root/src/jsifier.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-06-29 19:16:08 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-06-29 19:16:08 -0700
commit0e9344a42800afd65b3c74c86e79ed78c15161f0 (patch)
tree44dfad042648a02fed1fe76c002f677f5b70e497 /src/jsifier.js
parent8fc2acdc4ec487130a98f26e3e8e2a70bd54de96 (diff)
indexize external functions (for shared libraries, primarily), +some code cleanup around that. fixed issues 38
Diffstat (limited to 'src/jsifier.js')
-rw-r--r--src/jsifier.js26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index 62acf8d7..5a92ba52 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -3,8 +3,10 @@
// Main function
function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
+ var mainPass = !functionsOnly;
+
// Add additional necessary items for the main pass
- if (!functionsOnly) {
+ if (mainPass) {
var libFuncsToInclude;
if (INCLUDE_FULL_LIBRARY) {
assert(!BUILD_AS_SHARED_LIB, 'Cannot have both INCLUDE_FULL_LIBRARY and BUILD_AS_SHARED_LIB set.')
@@ -31,11 +33,15 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
substrate = new Substrate('JSifyer');
- var GLOBAL_VARIABLES = functionsOnly ? givenGlobalVariables : data.globalVariables;
+ var GLOBAL_VARIABLES = !mainPass ? givenGlobalVariables : data.globalVariables;
+
+ Functions.currFunctions = !mainPass ? givenFunctions : {};
+ if (mainPass) {
+ Functions.currExternalFunctions = set(data.functionStubs.map(function(item) { return item.ident }));
+ }
- Functions.currFunctions = functionsOnly ? givenFunctions : {};
- // Now that analysis has completed, we can get around to handling unparsedFunctions
- (functionsOnly ? data.functions : data.unparsedFunctions.concat(data.functions)).forEach(function(func) {
+ // 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) {
// Save just what we need, to save memory
Functions.currFunctions[func.ident] = {
hasVarArgs: func.hasVarArgs,
@@ -57,7 +63,11 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
if (data.unparsedFunctions.length > 0) {
// We are now doing the final JS generation
dprint('unparsedFunctions', '== Completed unparsedFunctions ==\n');
- //Debugging.clear(); // Save some memory, before the final heavy lifting
+
+ // Save some memory, before the final heavy lifting
+ //Functions.currFunctions = null;
+ //Functions.currExternalFunctions = null;
+ //Debugging.clear();
}
// Actors
@@ -771,12 +781,12 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
items = null;
var generated = [];
- if (!functionsOnly) {
+ if (mainPass) {
generated = generated.concat(itemsDict.type).concat(itemsDict.GlobalVariableStub).concat(itemsDict.functionStub);
}
generated = generated.concat(itemsDict.function).concat(data.unparsedFunctions);
- if (functionsOnly) return generated.map(function(item) { return item.JS }).join('\n');
+ if (!mainPass) return generated.map(function(item) { return item.JS }).join('\n');
// We are ready to print out the data, but must do so carefully - we are
// dealing with potentially *huge* strings. Convenient replacements and