diff options
author | Chad Austin <chad@imvu.com> | 2013-03-19 16:43:03 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:26:22 +0300 |
commit | 6f219fd0caad22aadad34dd46bc8043d299b4299 (patch) | |
tree | 11400c8421a89b8498699c9a1f8e0f21aceff6f1 | |
parent | fe2bcf89921105ad3719655ec59905cc63be5c3d (diff) |
Change EMSCRIPTEN_BINDINGS syntax and allow for out-of-order registration of value_tuple elements.
-rwxr-xr-x | src/embind/embind.js | 8 | ||||
-rwxr-xr-x | system/include/emscripten/bind.h | 26 | ||||
-rwxr-xr-x | system/lib/embind/bind.cpp | 4 |
3 files changed, 24 insertions, 14 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index 48bf2a7f..5dd631ff 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -339,10 +339,12 @@ function __embind_register_tuple_element( memberPointer = copyMemberPointer(memberPointer, memberPointerSize); var tupleType = requireRegisteredType(rawTupleType, 'tuple'); - // TODO: this could register elements out of order + var index = tupleType.elements.length; + tupleType.elements.push(undefined); + whenDependentTypesAreResolved([rawType], function(type) { type = type[0]; - tupleType.elements.push({ + tupleType.elements[index] = { read: function(ptr) { return type.fromWireType(getter(ptr, memberPointer)); }, @@ -351,7 +353,7 @@ function __embind_register_tuple_element( setter(ptr, memberPointer, type.toWireType(destructors, o)); runDestructors(destructors); } - }); + }; }); } diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h index a1b2a015..b7b17f20 100755 --- a/system/include/emscripten/bind.h +++ b/system/include/emscripten/bind.h @@ -169,14 +169,6 @@ namespace emscripten { GenericFunction constructor, GenericFunction destructor); } - - class BindingsDefinition { - public: - template<typename Function> - BindingsDefinition(Function fn) { - fn(); - } - }; } } @@ -1155,4 +1147,20 @@ namespace emscripten { }; } -#define EMSCRIPTEN_BINDINGS(fn) static emscripten::internal::BindingsDefinition anon_symbol(fn); +namespace emscripten { + namespace internal { + class BindingsDefinition { + public: + template<typename Function> + BindingsDefinition(Function fn) { + fn(); + } + }; + } +} + +#define EMSCRIPTEN_BINDINGS(name) \ + static struct BindingInitializer_##name { \ + BindingInitializer_##name(); \ + } BindingInitializer_##name##_instance; \ + BindingInitializer_##name::BindingInitializer_##name() diff --git a/system/lib/embind/bind.cpp b/system/lib/embind/bind.cpp index e844e52e..6994ef0c 100755 --- a/system/lib/embind/bind.cpp +++ b/system/lib/embind/bind.cpp @@ -38,7 +38,7 @@ namespace emscripten { }
}
-EMSCRIPTEN_BINDINGS(([]() {
+EMSCRIPTEN_BINDINGS(native_and_builtin_types) {
using namespace emscripten::internal;
_embind_register_void(TypeID<void>::get(), "void");
@@ -60,4 +60,4 @@ EMSCRIPTEN_BINDINGS(([]() { _embind_register_cstring(TypeID<std::string>::get(), "std::string");
_embind_register_emval(TypeID<val>::get(), "emscripten::val");
-}));
+}
|