#include #include <../lib/libcxxabi/src/private_typeinfo.h> #include <../lib/libcxxabi/include/cxxabi.h> #include #include #include #include #include using namespace emscripten; namespace emscripten { namespace internal { extern "C" { const char* EMSCRIPTEN_KEEPALIVE __typeName(const std::type_info* ti) { size_t nameLen = std::min(strlen(ti->name()), 1024U); char* name = (char *)malloc(nameLen+1); int stat; __cxxabiv1::__cxa_demangle(ti->name(), name, &nameLen, &stat); if (stat != 0) { strncpy(name, ti->name(), nameLen); name[nameLen] = '\0'; } return name; } size_t EMSCRIPTEN_KEEPALIVE __peek32(size_t p) { return *reinterpret_cast(p); } } JSInterface* create_js_interface(EM_VAL e) { return new JSInterface(e); } } } 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"); _embind_register_integer(TypeID::get(), "signed char"); _embind_register_integer(TypeID::get(), "unsigned char"); _embind_register_integer(TypeID::get(), "short"); _embind_register_integer(TypeID::get(), "unsigned short"); _embind_register_integer(TypeID::get(), "int"); _embind_register_integer(TypeID::get(), "unsigned int"); _embind_register_integer(TypeID::get(), "long"); _embind_register_integer(TypeID::get(), "unsigned long"); _embind_register_float(TypeID::get(), "float"); _embind_register_float(TypeID::get(), "double"); _embind_register_cstring(TypeID::get(), "std::string"); _embind_register_emval(TypeID::get(), "emscripten::val"); }