diff options
-rw-r--r-- | src/embind/embind.js | 14 | ||||
-rw-r--r-- | system/include/emscripten/bind.h | 2 |
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; } |