aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-31 14:48:33 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-31 14:48:33 -0800
commit2f233e3ca428099f520bf2b09e199d231887eb33 (patch)
tree77bc371a4fb45b5bbdf1a1240efb6a286ff499ef
parent387b4f7f37cd6280148f86670ce1b72a39eaf6ca (diff)
forward unindexable globals to asm
-rwxr-xr-xemscripten.py2
-rw-r--r--src/parseTools.js5
2 files changed, 5 insertions, 2 deletions
diff --git a/emscripten.py b/emscripten.py
index b9f27fe4..b4d7a61b 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -345,7 +345,7 @@ var i64Math_modulo = function(a, b, c, d, e) { i64Math.modulo(a, b, c, d, e) };
except:
pass
# If no named globals, only need externals
- global_vars = map(lambda g: g['name'], filter(lambda g: settings['NAMED_GLOBALS'] or g['external'], forwarded_json['Variables']['globals'].values()))
+ global_vars = map(lambda g: g['name'], filter(lambda g: settings['NAMED_GLOBALS'] or g['external'] or g.get('unIndexable'), forwarded_json['Variables']['globals'].values()))
global_funcs = ['_' + x for x in forwarded_json['Functions']['libraryFunctions'].keys()]
asm_global_funcs = ''.join([' var ' + g + '=env.' + g + ';\n' for g in basic_funcs + global_funcs])
asm_global_vars = ''.join([' var ' + g + '=env.' + g + '|0;\n' for g in basic_vars + global_vars])
diff --git a/src/parseTools.js b/src/parseTools.js
index 7b29d35e..a4a5cbac 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -399,7 +399,10 @@ var UNINDEXABLE_GLOBALS = set(
function isIndexableGlobal(ident) {
if (!(ident in Variables.globals)) return false;
- if (ident in UNINDEXABLE_GLOBALS) return false;
+ if (ident in UNINDEXABLE_GLOBALS) {
+ Variables.globals[ident].unIndexable = true;
+ return false;
+ }
var data = Variables.globals[ident];
// in asm.js, externals are just globals
return !data.alias && (ASM_JS || !data.external);