diff options
author | Chad Austin <caustin@gmail.com> | 2013-02-27 00:01:10 -0800 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:24:22 +0300 |
commit | 4185573aca1eeb4d088a227acbb995253e8f5b8c (patch) | |
tree | e466428fceb2891cebc7a1932dd4e96dcf87eeac /src | |
parent | 8e471a05c1d2e00a3d367cff36cb3788b9681491 (diff) |
Support external raw pointer constructors.
Diffstat (limited to 'src')
-rwxr-xr-x | src/embind/embind.js | 12 |
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); |