aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-09-13 01:34:11 +0300
committermax99x <max99x@gmail.com>2011-09-13 01:34:11 +0300
commite3e357f06ea64e577bb7f4ac99b9d034de953baa (patch)
treebbf289e8c62d425e9384850629760246e10f0e87
parent91569e2483a4ef10970ed42ee2066128750ff65e (diff)
Allowed library to define global variables that override undefined externals.
-rw-r--r--src/jsifier.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index 1d8c37d3..1124b008 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) {