#include #ifdef USE_CXA_DEMANGLE #include <../lib/libcxxabi/include/cxxabi.h> #endif #include #include #include #include #include #include using namespace emscripten; extern "C" { const char* __attribute__((used)) __getTypeName(const std::type_info* ti) { #ifdef USE_CXA_DEMANGLE int stat; char* demangled = abi::__cxa_demangle(ti->name(), NULL, NULL, &stat); if (stat == 0 && demangled) { return demangled; } switch (stat) { case -1: return strdup(""); case -2: return strdup(""); case -3: return strdup(""); default: return strdup(""); } #else return strdup(ti->name()); #endif } } namespace emscripten { namespace internal { JSInterface* create_js_interface(EM_VAL e) { return new JSInterface(e); } } } // TODO: fix in library.js or a proper emscripten libc extern "C" wchar_t *wmemset(wchar_t *dest, wchar_t c, size_t count) { wchar_t *o = dest; while (count--) { *o++ = c; } return dest; } // TODO: fix in library.js or a proper emscripten libc extern "C" wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t count) { wchar_t *o = dest; while (count--) { *dest++ = *src++; } return dest; } 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_float(TypeID::get(), "float"); _embind_register_float(TypeID::get(), "double"); _embind_register_std_string(TypeID::get(), "std::string"); _embind_register_std_wstring(TypeID::get(), sizeof(wchar_t), "std::wstring"); _embind_register_emval(TypeID::get(), "emscripten::val"); }