aboutsummaryrefslogtreecommitdiff
path: root/src/embind/embind.js
diff options
context:
space:
mode:
authorChad Austin <chad@imvu.com>2013-02-28 13:25:31 -0800
committerJukka Jylänki <jujjyl@gmail.com>2013-04-12 14:24:34 +0300
commitf22f5867872ffc07ba3e3a75472009d4fe4e0b42 (patch)
treec7281de8a1f3f175ec30a42149d188d5ef9ac452 /src/embind/embind.js
parent612076a7cd5e24924f878873b01c321e0ccee444 (diff)
Apparently the WireType Marshaller is no longer necessary??
Diffstat (limited to 'src/embind/embind.js')
-rwxr-xr-xsrc/embind/embind.js34
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,