aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-09-08 21:03:07 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-09-08 21:03:07 -0700
commit534cc7f05846daa88f2d3f2d149d9768262033e9 (patch)
tree433d68e45b1a94fb642d47a8065d726eebe8e69f
parenta70b811afca7ea85792e72f72d7211fa3b5e731b (diff)
bindings generator fix +fixes for use of |this| instead of Module
-rw-r--r--src/preamble.js4
-rwxr-xr-xtools/bindings_generator.py17
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: