aboutsummaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
Diffstat (limited to 'system')
-rwxr-xr-xsystem/include/emscripten/bind.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h
index 33e1cc43..257c7334 100755
--- a/system/include/emscripten/bind.h
+++ b/system/include/emscripten/bind.h
@@ -113,6 +113,7 @@ namespace emscripten {
TYPEID classType,
unsigned argCount,
TYPEID argTypes[],
+ GenericFunction invoker,
GenericFunction constructor);
void _embind_register_class_method(
@@ -211,7 +212,7 @@ namespace emscripten {
template<typename ReturnType, typename... Args>
struct Invoker {
static typename internal::BindingType<ReturnType>::WireType invoke(
- ReturnType (fn)(Args...),
+ ReturnType (*fn)(Args...),
typename internal::BindingType<Args>::WireType... args
) {
return internal::BindingType<ReturnType>::toWireType(
@@ -225,7 +226,7 @@ namespace emscripten {
template<typename... Args>
struct Invoker<void, Args...> {
static void invoke(
- void (fn)(Args...),
+ void (*fn)(Args...),
typename internal::BindingType<Args>::WireType... args
) {
return fn(
@@ -655,15 +656,23 @@ namespace emscripten {
}
template<typename... ConstructorArgs, typename... Policies>
- class_& constructor(Policies...) {
+ class_& constructor(Policies... policies) {
+ return constructor(
+ &internal::operator_new<ClassType, ConstructorArgs...>,
+ policies...);
+ }
+
+ template<typename... Args, typename... Policies>
+ class_& constructor(ClassType* (*factory)(Args...), Policies...) {
using namespace internal;
- typename WithPolicies<Policies...>::template ArgTypeList<void, ConstructorArgs...> args;
+ typename WithPolicies<Policies...>::template ArgTypeList<void, Args...> args;
_embind_register_class_constructor(
TypeID<ClassType>::get(),
args.count,
args.types,
- reinterpret_cast<GenericFunction>(&raw_constructor<ClassType, ConstructorArgs...>));
+ reinterpret_cast<GenericFunction>(&Invoker<ClassType*, Args...>::invoke),
+ reinterpret_cast<GenericFunction>(factory));
return *this;
}