diff options
author | Chad Austin <chad@imvu.com> | 2013-02-28 13:25:31 -0800 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:24:34 +0300 |
commit | f22f5867872ffc07ba3e3a75472009d4fe4e0b42 (patch) | |
tree | c7281de8a1f3f175ec30a42149d188d5ef9ac452 /src | |
parent | 612076a7cd5e24924f878873b01c321e0ccee444 (diff) |
Apparently the WireType Marshaller is no longer necessary??
Diffstat (limited to 'src')
-rwxr-xr-x | src/embind/embind.js | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index e850cc3f..589f7ba9 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -833,7 +833,6 @@ function __embind_register_class_constructor( ) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); invoker = FUNCTION_TABLE[invoker]; - rawConstructor = rawConstructor; requestDeferredRegistration(function() { var classType = requireRegisteredType(rawClassType, 'class'); @@ -858,6 +857,39 @@ function __embind_register_class_constructor( }); } +function __embind_register_class_smart_ptr_constructor( + rawClassType, + argCount, + rawArgTypesAddr, + invoker, + rawConstructor +) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + invoker = FUNCTION_TABLE[invoker]; + + requestDeferredRegistration(function() { + var classType = requireRegisteredType(rawClassType, 'class'); + var humanName = 'constructor ' + classType.name; + var argTypes = requireArgumentTypes(rawArgTypes, humanName); + classType.constructor.body = function() { + if (arguments.length !== argCount - 1) { + throwBindingError(humanName + ' + called with ' + arguments.length + ' arguments, expected ' + (argCount-1)); + } + var destructors = []; + var args = new Array(argCount); + args[0] = rawConstructor; + for (var i = 1; i < argCount; ++i) { + args[i] = argTypes[i].toWireType(destructors, arguments[i - 1]); + } + + var ptr = invoker.apply(null, args); + runDestructors(destructors); + + return argTypes[0].fromWireType(ptr); + }; + }); +} + function __embind_register_class_method( rawClassType, methodName, |