diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-26 14:01:04 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-09-03 14:41:29 -0700 |
commit | 508e90d7b7b57d0773102cecff7a860ad168cfc1 (patch) | |
tree | 49ec0762849322220eed808d5cc636f918f689d4 /emscripten.py | |
parent | 12fec0413314c6f7d8975114a4fd8802f7a5a2c6 (diff) |
track maximum function index when using dlopen support
Diffstat (limited to 'emscripten.py')
-rwxr-xr-x | emscripten.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/emscripten.py b/emscripten.py index c5e235d8..9f54e07f 100755 --- a/emscripten.py +++ b/emscripten.py @@ -612,17 +612,22 @@ Runtime.stackRestore = function(top) { asm['stackRestore'](top) }; ''' % (pre_tables + '\n'.join(function_tables_impls) + '\n' + function_tables_defs.replace('\n', '\n '), exports, the_global, sending, receiving)] # Set function table masks - def function_table_maskize(js): - masks = {} - default = None - for sig, table in last_forwarded_json['Functions']['tables'].iteritems(): - masks[sig] = str(table.count(',')) - default = sig + masks = {} + max_mask = 0 + for sig, table in last_forwarded_json['Functions']['tables'].iteritems(): + mask = table.count(',') + masks[sig] = str(mask) + max_mask = max(mask, max_mask) + def function_table_maskize(js, masks): def fix(m): sig = m.groups(0)[0] return masks[sig] return re.sub(r'{{{ FTM_([\w\d_$]+) }}}', lambda m: fix(m), js) # masks[m.groups(0)[0]] - funcs_js = map(function_table_maskize, funcs_js) + funcs_js = map(lambda js: function_table_maskize(js, masks), funcs_js) + if settings.get('DLOPEN_SUPPORT'): + funcs_js.append(''' + asm.maxFunctionIndex = %d; +''' % max_mask) else: function_tables_defs = '\n'.join([table for table in last_forwarded_json['Functions']['tables'].itervalues()]) outfile.write(function_tables_defs) |