aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/embind/embind.js14
-rw-r--r--system/include/emscripten/bind.h2
2 files changed, 10 insertions, 6 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js
index e0868838..ef1851e1 100644
--- a/src/embind/embind.js
+++ b/src/embind/embind.js
@@ -566,27 +566,29 @@ function __embind_register_class_classmethod(
returnType,
argCount,
argTypes,
- method
+ invoker,
+ fn
) {
classType = requireRegisteredType(classType, 'class');
methodName = Pointer_stringify(methodName);
var humanName = classType.name + '.' + methodName;
returnType = requireRegisteredType(returnType, 'classmethod ' + humanName + ' return value');
argTypes = requireArgumentTypes(argCount, argTypes, 'classmethod ' + humanName);
- method = FUNCTION_TABLE[method];
+ invoker = FUNCTION_TABLE[invoker];
classType.constructor[methodName] = function() {
if (arguments.length !== argCount) {
- throw new BindingError('emscripten binding method ' + humanName + ' called with ' + arguments.length + ' arguments, expected ' + argCount);
+ throw new BindingError('emscripten binding class method ' + humanName + ' called with ' + arguments.length + ' arguments, expected ' + argCount);
}
var destructors = [];
- var args = new Array(argCount);
+ var args = new Array(argCount + 1);
+ args[0] = fn;
for (var i = 0; i < argCount; ++i) {
- args[i] = argTypes[i].toWireType(destructors, arguments[i]);
+ args[i + 1] = argTypes[i].toWireType(destructors, arguments[i]);
}
- var rv = returnType.fromWireType(method.apply(null, args));
+ var rv = returnType.fromWireType(invoker.apply(null, args));
runDestructors(destructors);
return rv;
};
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h
index f2e70b31..e48be414 100644
--- a/system/include/emscripten/bind.h
+++ b/system/include/emscripten/bind.h
@@ -134,6 +134,7 @@ namespace emscripten {
TYPEID returnType,
unsigned argCount,
TYPEID argTypes[],
+ GenericFunction invoker,
GenericFunction method);
void _embind_register_enum(
@@ -579,6 +580,7 @@ namespace emscripten {
TypeID<ReturnType>::get(),
args.count,
args.types,
+ reinterpret_cast<internal::GenericFunction>(&internal::Invoker<ReturnType, Args...>::invoke),
reinterpret_cast<GenericFunction>(classMethod));
return *this;
}