aboutsummaryrefslogtreecommitdiff
path: root/src/embind/embind.js
diff options
context:
space:
mode:
authorChad Austin <caustin@gmail.com>2013-02-27 00:01:10 -0800
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:24:22 +0300
commit4185573aca1eeb4d088a227acbb995253e8f5b8c (patch)
treee466428fceb2891cebc7a1932dd4e96dcf87eeac /src/embind/embind.js
parent8e471a05c1d2e00a3d367cff36cb3788b9681491 (diff)
Support external raw pointer constructors.
Diffstat (limited to 'src/embind/embind.js')
-rwxr-xr-xsrc/embind/embind.js12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js
index 277515a5..5a0699ba 100755
--- a/src/embind/embind.js
+++ b/src/embind/embind.js
@@ -788,10 +788,13 @@ function __embind_register_class_constructor(
rawClassType,
argCount,
rawArgTypesAddr,
+ invoker,
rawConstructor
) {
var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
- rawConstructor = FUNCTION_TABLE[rawConstructor];
+ invoker = FUNCTION_TABLE[invoker];
+ rawConstructor = rawConstructor;
+
requestDeferredRegistration(function() {
var classType = requireRegisteredType(rawClassType, 'class');
var humanName = 'constructor ' + classType.name;
@@ -801,12 +804,13 @@ function __embind_register_class_constructor(
throw new BindingError('emscripten binding ' + humanName + ' called with ' + arguments.length + ' arguments, expected ' + (argCount-1));
}
var destructors = [];
- var args = new Array(argCount - 1);
+ var args = new Array(argCount);
+ args[0] = rawConstructor;
for (var i = 1; i < argCount; ++i) {
- args[i - 1] = argTypes[i].toWireType(destructors, arguments[i - 1]);
+ args[i] = argTypes[i].toWireType(destructors, arguments[i - 1]);
}
- var ptr = rawConstructor.apply(null, args);
+ var ptr = invoker.apply(null, args);
runDestructors(destructors);
return classType.Handle.call(this, ptr);