#include #include <../lib/libcxxabi/include/cxxabi.h> #include #include #include #include #include using namespace emscripten; static std::string _embind_getTypeName(intptr_t ti_raw) { auto ti = reinterpret_cast(ti_raw); int stat; char* demangled = abi::__cxa_demangle(ti->name(), NULL, NULL, &stat); if (stat == 0) { std::string rv(demangled); free(demangled); return rv; } switch (stat) { case -1: return ""; case -2: return ""; case -3: return ""; default: return ""; } } namespace emscripten { namespace internal { 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"); function("_embind_getTypeName", &_embind_getTypeName); }