diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-09-08 21:03:07 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-09-08 21:03:07 -0700 |
commit | 534cc7f05846daa88f2d3f2d149d9768262033e9 (patch) | |
tree | 433d68e45b1a94fb642d47a8065d726eebe8e69f | |
parent | a70b811afca7ea85792e72f72d7211fa3b5e731b (diff) |
bindings generator fix +fixes for use of |this| instead of Module
-rw-r--r-- | src/preamble.js | 4 | ||||
-rwxr-xr-x | tools/bindings_generator.py | 17 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/preamble.js b/src/preamble.js index 8ab9bce8..35bb75d7 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -320,7 +320,7 @@ function setValue(ptr, value, type) { default: abort('invalid type for setValue: ' + type); } } -this['setValue'] = setValue; +Module['setValue'] = setValue; // Parallel to setValue. @@ -338,7 +338,7 @@ function getValue(ptr, type) { } return null; } -this['getValue'] = getValue; +Module['getValue'] = getValue; // Allocates memory for some data and initializes it properly. diff --git a/tools/bindings_generator.py b/tools/bindings_generator.py index 87359fa0..0a1a75cc 100755 --- a/tools/bindings_generator.py +++ b/tools/bindings_generator.py @@ -442,8 +442,17 @@ function customizeVTable(object, replacementPairs) { FUNCTION_TABLE.push(0); setValue(vTable2 + Runtime.QUANTUM_SIZE*i, index, 'void*'); } + var args = [{ptr: 0}]; replacementPairs.forEach(function(pair) { - pair.original.call(object); + // We need the wrapper function that converts arguments to not fail. Keep adding arguments til it works. + while(1) { + try { + pair['original'].apply(object, args); + break; + } catch(e) { + args.push(args[0]); + } + } pair.originalIndex = getValue(vTable + canaryValue*Runtime.QUANTUM_SIZE, 'void*'); }); FUNCTION_TABLE = FUNCTION_TABLE.slice(0, functions); @@ -453,7 +462,7 @@ function customizeVTable(object, replacementPairs) { var replacements = {}; replacementPairs.forEach(function(pair) { var replacementIndex = FUNCTION_TABLE.length; - FUNCTION_TABLE.push(pair.replacement); + FUNCTION_TABLE.push(pair['replacement']); FUNCTION_TABLE.push(0); replacements[pair.originalIndex] = replacementIndex; }); @@ -485,7 +494,7 @@ def generate_class(generating_classname, classname, clazz): # TODO: deprecate ge # For abstract base classes, add a function definition on top. There is no constructor gen_js.write('\nfunction ' + generating_classname_head + ('(){ throw "%s is abstract!" }\n' % generating_classname_head) + generate_wrapping_code(generating_classname_head)) if export: - gen_js.write('''this['%s'] = %s; + gen_js.write('''Module['%s'] = %s; ''' % (generating_classname_head, generating_classname_head)) for method in clazz['final_methods'].itervalues(): @@ -658,7 +667,7 @@ function %s(%s) { if export: js_text += ''' -this['%s'] = %s; +Module['%s'] = %s; ''' % (mname_suffixed, mname_suffixed) else: |