aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/include/emscripten/bind.h116
-rw-r--r--system/include/emscripten/val.h14
-rw-r--r--system/include/emscripten/wire.h34
-rwxr-xr-xsystem/lib/embind/bind.cpp30
4 files changed, 106 insertions, 88 deletions
diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h
index 55fda986..400a9472 100644
--- a/system/include/emscripten/bind.h
+++ b/system/include/emscripten/bind.h
@@ -19,56 +19,56 @@ namespace emscripten {
const char* payload) __attribute__((noreturn));
void _embind_register_void(
- TypeID voidType,
+ TYPEID voidType,
const char* name);
void _embind_register_bool(
- TypeID boolType,
+ TYPEID boolType,
const char* name,
bool trueValue,
bool falseValue);
void _embind_register_integer(
- TypeID integerType,
+ TYPEID integerType,
const char* name);
void _embind_register_float(
- TypeID floatType,
+ TYPEID floatType,
const char* name);
void _embind_register_cstring(
- TypeID stringType,
+ TYPEID stringType,
const char* name);
void _embind_register_emval(
- TypeID emvalType,
+ TYPEID emvalType,
const char* name);
void _embind_register_function(
const char* name,
- TypeID returnType,
+ TYPEID returnType,
unsigned argCount,
- TypeID argTypes[],
+ TYPEID argTypes[],
GenericFunction invoker,
GenericFunction function);
void _embind_register_tuple(
- TypeID tupleType,
+ TYPEID tupleType,
const char* name,
GenericFunction constructor,
GenericFunction destructor);
void _embind_register_tuple_element(
- TypeID tupleType,
- TypeID elementType,
+ TYPEID tupleType,
+ TYPEID elementType,
GenericFunction getter,
GenericFunction setter,
size_t memberPointerSize,
void* memberPointer);
void _embind_register_tuple_element_accessor(
- TypeID tupleType,
- TypeID elementType,
+ TYPEID tupleType,
+ TYPEID elementType,
GenericFunction staticGetter,
size_t getterSize,
void* getter,
@@ -77,69 +77,69 @@ namespace emscripten {
void* setter);
void _embind_register_struct(
- TypeID structType,
+ TYPEID structType,
const char* name,
GenericFunction constructor,
GenericFunction destructor);
void _embind_register_struct_field(
- TypeID structType,
+ TYPEID structType,
const char* name,
- TypeID fieldType,
+ TYPEID fieldType,
GenericFunction getter,
GenericFunction setter,
size_t memberPointerSize,
void* memberPointer);
void _embind_register_class(
- TypeID classType,
+ TYPEID classType,
const char* className,
GenericFunction destructor);
void _embind_register_class_constructor(
- TypeID classType,
+ TYPEID classType,
unsigned argCount,
- TypeID argTypes[],
+ TYPEID argTypes[],
GenericFunction constructor);
void _embind_register_class_method(
- TypeID classType,
+ TYPEID classType,
const char* methodName,
- TypeID returnType,
+ TYPEID returnType,
unsigned argCount,
- TypeID argTypes[],
+ TYPEID argTypes[],
GenericFunction invoker,
size_t memberFunctionSize,
void* memberFunction);
void _embind_register_class_field(
- TypeID classType,
+ TYPEID classType,
const char* fieldName,
- TypeID fieldType,
+ TYPEID fieldType,
GenericFunction getter,
GenericFunction setter,
size_t memberPointerSize,
void* memberPointer);
void _embind_register_class_classmethod(
- TypeID classType,
+ TYPEID classType,
const char* methodName,
- TypeID returnType,
+ TYPEID returnType,
unsigned argCount,
- TypeID argTypes[],
+ TYPEID argTypes[],
GenericFunction method);
void _embind_register_enum(
- TypeID enumType,
+ TYPEID enumType,
const char* name);
void _embind_register_enum_value(
- TypeID enumType,
+ TYPEID enumType,
const char* valueName,
GenericEnumValue value);
void _embind_register_interface(
- TypeID interfaceType,
+ TYPEID interfaceType,
const char* name,
GenericFunction constructor,
GenericFunction destructor);
@@ -193,7 +193,7 @@ namespace emscripten {
internal::ArgTypeList<Args...> args;
internal::_embind_register_function(
name,
- internal::getTypeID<ReturnType>(),
+ internal::TypeID<ReturnType>::get(),
args.count,
args.types,
reinterpret_cast<internal::GenericFunction>(&internal::Invoker<ReturnType, Args...>::invoke),
@@ -321,7 +321,7 @@ namespace emscripten {
value_tuple(const char* name) {
internal::registerStandardTypes();
internal::_embind_register_tuple(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
name,
reinterpret_cast<internal::GenericFunction>(&internal::raw_constructor<ClassType>),
reinterpret_cast<internal::GenericFunction>(&internal::raw_destructor<ClassType>));
@@ -330,8 +330,8 @@ namespace emscripten {
template<typename ElementType>
value_tuple& element(ElementType ClassType::*field) {
internal::_embind_register_tuple_element(
- internal::getTypeID<ClassType>(),
- internal::getTypeID<ElementType>(),
+ internal::TypeID<ClassType>::get(),
+ internal::TypeID<ElementType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::get),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::set),
sizeof(field),
@@ -343,8 +343,8 @@ namespace emscripten {
template<typename ElementType>
value_tuple& element(ElementType (*getter)(const ClassType&), void (*setter)(ClassType&, ElementType)) {
internal::_embind_register_tuple_element_accessor(
- internal::getTypeID<ClassType>(),
- internal::getTypeID<ElementType>(),
+ internal::TypeID<ClassType>::get(),
+ internal::TypeID<ElementType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::template propertyGet<ElementType(const ClassType&)>),
sizeof(getter),
&getter,
@@ -357,8 +357,8 @@ namespace emscripten {
template<typename ElementType>
value_tuple& element(ElementType (*getter)(const ClassType&), void (*setter)(ClassType&, const ElementType&)) {
internal::_embind_register_tuple_element_accessor(
- internal::getTypeID<ClassType>(),
- internal::getTypeID<ElementType>(),
+ internal::TypeID<ClassType>::get(),
+ internal::TypeID<ElementType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::template propertyGet<ElementType(const ClassType&)>),
sizeof(getter),
&getter,
@@ -371,8 +371,8 @@ namespace emscripten {
template<typename ElementType>
value_tuple& element(ElementType (*getter)(const ClassType&), void (*setter)(ClassType&, const ElementType&&)) {
internal::_embind_register_tuple_element_accessor(
- internal::getTypeID<ClassType>(),
- internal::getTypeID<ElementType>(),
+ internal::TypeID<ClassType>::get(),
+ internal::TypeID<ElementType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::template propertyGet<ElementType(const ClassType&)>),
sizeof(getter),
&getter,
@@ -385,8 +385,8 @@ namespace emscripten {
template<typename ElementType>
value_tuple& element(ElementType (*getter)(const ClassType&), void (*setter)(ClassType&, ElementType&)) {
internal::_embind_register_tuple_element_accessor(
- internal::getTypeID<ClassType>(),
- internal::getTypeID<ElementType>(),
+ internal::TypeID<ClassType>::get(),
+ internal::TypeID<ElementType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, ElementType>::template propertyGet<ElementType(const ClassType&)>),
sizeof(getter),
&getter,
@@ -403,7 +403,7 @@ namespace emscripten {
value_struct(const char* name) {
internal::registerStandardTypes();
internal::_embind_register_struct(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
name,
reinterpret_cast<internal::GenericFunction>(&internal::raw_constructor<ClassType>),
reinterpret_cast<internal::GenericFunction>(&internal::raw_destructor<ClassType>));
@@ -412,9 +412,9 @@ namespace emscripten {
template<typename FieldType>
value_struct& field(const char* fieldName, FieldType ClassType::*field) {
internal::_embind_register_struct_field(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
fieldName,
- internal::getTypeID<FieldType>(),
+ internal::TypeID<FieldType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, FieldType>::get),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, FieldType>::set),
sizeof(field),
@@ -432,7 +432,7 @@ namespace emscripten {
class_(const char* name) {
internal::registerStandardTypes();
internal::_embind_register_class(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
name,
reinterpret_cast<internal::GenericFunction>(&internal::raw_destructor<ClassType>));
}
@@ -441,7 +441,7 @@ namespace emscripten {
class_& constructor() {
internal::ArgTypeList<ConstructorArgs...> args;
internal::_embind_register_class_constructor(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
args.count,
args.types,
reinterpret_cast<internal::GenericFunction>(&internal::raw_constructor<ClassType, ConstructorArgs...>));
@@ -452,9 +452,9 @@ namespace emscripten {
class_& method(const char* methodName, ReturnType (ClassType::*memberFunction)(Args...)) {
internal::ArgTypeList<Args...> args;
internal::_embind_register_class_method(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
methodName,
- internal::getTypeID<ReturnType>(),
+ internal::TypeID<ReturnType>::get(),
args.count,
args.types,
reinterpret_cast<internal::GenericFunction>(&internal::MethodInvoker<ClassType, ReturnType, Args...>::invoke),
@@ -467,9 +467,9 @@ namespace emscripten {
class_& method(const char* methodName, ReturnType (ClassType::*memberFunction)(Args...) const) {
internal::ArgTypeList<Args...> args;
internal::_embind_register_class_method(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
methodName,
- internal::getTypeID<ReturnType>(),
+ internal::TypeID<ReturnType>::get(),
args.count,
args.types,
reinterpret_cast<internal::GenericFunction>(&internal::ConstMethodInvoker<ClassType, ReturnType, Args...>::invoke),
@@ -481,9 +481,9 @@ namespace emscripten {
template<typename FieldType>
class_& field(const char* fieldName, FieldType ClassType::*field) {
internal::_embind_register_class_field(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
fieldName,
- internal::getTypeID<FieldType>(),
+ internal::TypeID<FieldType>::get(),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, FieldType>::get),
reinterpret_cast<internal::GenericFunction>(&internal::FieldAccess<ClassType, FieldType>::set),
sizeof(field),
@@ -495,9 +495,9 @@ namespace emscripten {
class_& classmethod(const char* methodName, ReturnType (*classMethod)(Args...)) {
internal::ArgTypeList<Args...> args;
internal::_embind_register_class_classmethod(
- internal::getTypeID<ClassType>(),
+ internal::TypeID<ClassType>::get(),
methodName,
- internal::getTypeID<ReturnType>(),
+ internal::TypeID<ReturnType>::get(),
args.count,
args.types,
reinterpret_cast<internal::GenericFunction>(classMethod));
@@ -510,7 +510,7 @@ namespace emscripten {
public:
enum_(const char* name) {
_embind_register_enum(
- internal::getTypeID<EnumType>(),
+ internal::TypeID<EnumType>::get(),
name);
}
@@ -520,7 +520,7 @@ namespace emscripten {
static_assert(sizeof(value) <= sizeof(internal::GenericEnumValue), "enum type must fit in a GenericEnumValue");
_embind_register_enum_value(
- internal::getTypeID<EnumType>(),
+ internal::TypeID<EnumType>::get(),
name,
static_cast<internal::GenericEnumValue>(value));
return *this;
@@ -637,7 +637,7 @@ namespace emscripten {
interface(const char* name) {
_embind_register_interface(
- internal::getTypeID<InterfaceType>(),
+ internal::TypeID<InterfaceType>::get(),
name,
reinterpret_cast<internal::GenericFunction>(&internal::create_interface_wrapper<WrapperType>),
reinterpret_cast<internal::GenericFunction>(&internal::raw_destructor<WrapperType>));
diff --git a/system/include/emscripten/val.h b/system/include/emscripten/val.h
index 96db9326..6dd4021c 100644
--- a/system/include/emscripten/val.h
+++ b/system/include/emscripten/val.h
@@ -19,17 +19,17 @@ namespace emscripten {
EM_VAL _emval_get_property_by_unsigned_long(EM_VAL object, unsigned long key);
void _emval_set_property(EM_VAL object, const char* key, EM_VAL value);
void _emval_set_property_by_int(EM_VAL object, long key, EM_VAL value);
- void _emval_as(EM_VAL value, emscripten::internal::TypeID returnType);
+ void _emval_as(EM_VAL value, emscripten::internal::TYPEID returnType);
EM_VAL _emval_call(
EM_VAL value,
unsigned argCount,
- internal::TypeID argTypes[]
+ internal::TYPEID argTypes[]
/*, ... */);
EM_VAL _emval_call_method(
EM_VAL value,
const char* methodName,
unsigned argCount,
- internal::TypeID argTypes[]
+ internal::TYPEID argTypes[]
/*, ... */);
}
}
@@ -106,7 +106,7 @@ namespace emscripten {
typedef internal::EM_VAL (*TypedCall)(
internal::EM_VAL,
unsigned,
- internal::TypeID argTypes[],
+ internal::TYPEID argTypes[],
typename internal::BindingType<Args>::WireType...);
TypedCall typedCall = reinterpret_cast<TypedCall>(&internal::_emval_call);
return val(
@@ -124,7 +124,7 @@ namespace emscripten {
internal::EM_VAL,
const char* name,
unsigned,
- internal::TypeID argTypes[],
+ internal::TYPEID argTypes[],
typename internal::BindingType<Args>::WireType...);
TypedCall typedCall = reinterpret_cast<TypedCall>(&internal::_emval_call_method);
return val(
@@ -142,10 +142,10 @@ namespace emscripten {
typedef typename BT::WireType (*TypedAs)(
internal::EM_VAL value,
- emscripten::internal::TypeID returnType);
+ emscripten::internal::TYPEID returnType);
TypedAs typedAs = reinterpret_cast<TypedAs>(&internal::_emval_as);
- typename BT::WireType wt = typedAs(handle, internal::getTypeID<T>());
+ typename BT::WireType wt = typedAs(handle, internal::TypeID<T>::get());
internal::WireDeleter<T> deleter(wt);
return BT::fromWireType(wt);
}
diff --git a/system/include/emscripten/wire.h b/system/include/emscripten/wire.h
index fbf0897d..dcfd09d0 100644
--- a/system/include/emscripten/wire.h
+++ b/system/include/emscripten/wire.h
@@ -9,7 +9,7 @@
namespace emscripten {
namespace internal {
- typedef const struct _TypeID* TypeID;
+ typedef const struct _TYPEID* TYPEID;
// This implementation is technically not legal, as it's not
// required that two calls to typeid produce the same exact
@@ -18,9 +18,18 @@ namespace emscripten {
// an int, and store all TypeInfo we see in a map, allocating
// new TypeIDs as we add new items to the map.
template<typename T>
- inline TypeID getTypeID() {
- return reinterpret_cast<TypeID>(&typeid(T));
- }
+ struct TypeID {
+ static TYPEID get() {
+ return reinterpret_cast<TYPEID>(&typeid(T));
+ }
+ };
+
+ template<typename T>
+ struct TypeID<std::unique_ptr<T>> {
+ static TYPEID get() {
+ return TypeID<T>::get();
+ }
+ };
// count<>
@@ -44,14 +53,14 @@ namespace emscripten {
template<>
struct ArgTypes<> {
- static void fill(TypeID* argTypes) {
+ static void fill(TYPEID* argTypes) {
}
};
template<typename T, typename... Args>
struct ArgTypes<T, Args...> {
- static void fill(TypeID* argTypes) {
- *argTypes = getTypeID<T>();
+ static void fill(TYPEID* argTypes) {
+ *argTypes = TypeID<T>::get();
return ArgTypes<Args...>::fill(argTypes + 1);
}
};
@@ -66,7 +75,7 @@ namespace emscripten {
}
unsigned count;
- TypeID types[args_count];
+ TYPEID types[args_count];
};
// BindingType<T>
@@ -192,6 +201,15 @@ namespace emscripten {
};
template<typename T>
+ struct GenericBindingType<std::unique_ptr<T>> {
+ typedef typename BindingType<T>::WireType WireType;
+
+ static WireType toWireType(std::unique_ptr<T> p) {
+ return BindingType<T>::toWireType(*p);
+ }
+ };
+
+ template<typename T>
struct WireDeleter {
typedef typename BindingType<T>::WireType WireType;
diff --git a/system/lib/embind/bind.cpp b/system/lib/embind/bind.cpp
index b63a86aa..befce08b 100755
--- a/system/lib/embind/bind.cpp
+++ b/system/lib/embind/bind.cpp
@@ -9,25 +9,25 @@ namespace emscripten {
if (first) {
first = false;
- _embind_register_void(getTypeID<void>(), "void");
+ _embind_register_void(TypeID<void>::get(), "void");
- _embind_register_bool(getTypeID<bool>(), "bool", true, false);
+ _embind_register_bool(TypeID<bool>::get(), "bool", true, false);
- _embind_register_integer(getTypeID<char>(), "char");
- _embind_register_integer(getTypeID<signed char>(), "signed char");
- _embind_register_integer(getTypeID<unsigned char>(), "unsigned char");
- _embind_register_integer(getTypeID<signed short>(), "short");
- _embind_register_integer(getTypeID<unsigned short>(), "unsigned short");
- _embind_register_integer(getTypeID<signed int>(), "int");
- _embind_register_integer(getTypeID<unsigned int>(), "unsigned int");
- _embind_register_integer(getTypeID<signed long>(), "long");
- _embind_register_integer(getTypeID<unsigned long>(), "unsigned long");
+ _embind_register_integer(TypeID<char>::get(), "char");
+ _embind_register_integer(TypeID<signed char>::get(), "signed char");
+ _embind_register_integer(TypeID<unsigned char>::get(), "unsigned char");
+ _embind_register_integer(TypeID<signed short>::get(), "short");
+ _embind_register_integer(TypeID<unsigned short>::get(), "unsigned short");
+ _embind_register_integer(TypeID<signed int>::get(), "int");
+ _embind_register_integer(TypeID<unsigned int>::get(), "unsigned int");
+ _embind_register_integer(TypeID<signed long>::get(), "long");
+ _embind_register_integer(TypeID<unsigned long>::get(), "unsigned long");
- _embind_register_float(getTypeID<float>(), "float");
- _embind_register_float(getTypeID<double>(), "double");
+ _embind_register_float(TypeID<float>::get(), "float");
+ _embind_register_float(TypeID<double>::get(), "double");
- _embind_register_cstring(getTypeID<std::string>(), "std::string");
- _embind_register_emval(getTypeID<val>(), "emscripten::val");
+ _embind_register_cstring(TypeID<std::string>::get(), "std::string");
+ _embind_register_emval(TypeID<val>::get(), "emscripten::val");
}
}
}