From 464f4a3cace3eba27c145d347d031930b9630a51 Mon Sep 17 00:00:00 2001 From: Chad Austin Date: Sat, 22 Mar 2014 21:10:46 -0700 Subject: make val::as<> compatible with asm.js --- system/lib/embind/bind.cpp | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'system/lib/embind/bind.cpp') diff --git a/system/lib/embind/bind.cpp b/system/lib/embind/bind.cpp index 12264dfd..f43d1ea1 100644 --- a/system/lib/embind/bind.cpp +++ b/system/lib/embind/bind.cpp @@ -8,6 +8,7 @@ #include #include #include +#include using namespace emscripten; @@ -36,25 +37,39 @@ extern "C" { } } +namespace { + template + static void register_integer(const char* name) { + using namespace internal; + _embind_register_integer(TypeID::get(), name, sizeof(T), std::numeric_limits::min(), std::numeric_limits::max()); + } + + template + static void register_float(const char* name) { + using namespace internal; + _embind_register_float(TypeID::get(), name, sizeof(T)); + } +} + EMSCRIPTEN_BINDINGS(native_and_builtin_types) { using namespace emscripten::internal; _embind_register_void(TypeID::get(), "void"); - _embind_register_bool(TypeID::get(), "bool", true, false); - - _embind_register_integer(TypeID::get(), "char", CHAR_MIN, CHAR_MAX); - _embind_register_integer(TypeID::get(), "signed char", SCHAR_MIN, SCHAR_MAX); - _embind_register_integer(TypeID::get(), "unsigned char", 0, UCHAR_MAX); - _embind_register_integer(TypeID::get(), "short", SHRT_MIN, SHRT_MAX); - _embind_register_integer(TypeID::get(), "unsigned short", 0, USHRT_MAX); - _embind_register_integer(TypeID::get(), "int", INT_MIN, INT_MAX); - _embind_register_integer(TypeID::get(), "unsigned int", 0, UINT_MAX); - _embind_register_integer(TypeID::get(), "long", LONG_MIN, LONG_MAX); - _embind_register_integer(TypeID::get(), "unsigned long", 0, ULONG_MAX); + _embind_register_bool(TypeID::get(), "bool", sizeof(bool), true, false); + + register_integer("char"); + register_integer("signed char"); + register_integer("unsigned char"); + register_integer("short"); + register_integer("unsigned short"); + register_integer("int"); + register_integer("unsigned int"); + register_integer("long"); + register_integer("unsigned long"); - _embind_register_float(TypeID::get(), "float"); - _embind_register_float(TypeID::get(), "double"); + register_float("float"); + register_float("double"); _embind_register_std_string(TypeID::get(), "std::string"); _embind_register_std_wstring(TypeID::get(), sizeof(wchar_t), "std::wstring"); -- cgit v1.2.3-70-g09d2