diff options
author | Chad Austin <chad@imvu.com> | 2013-04-01 17:54:55 -0700 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:27:01 +0300 |
commit | de48fdc5b028df627b7070c17d37479654f71a13 (patch) | |
tree | 95d965e3a9a94506947e5cc187e5096de49cf72e | |
parent | e30dd3017a318d1f5862bd3688679c687c66d621 (diff) |
Further generalize support for tuple elements, and in the meantime, fix a bug that made it into one variant of the function but not the other...
-rwxr-xr-x | src/embind/embind.js | 38 | ||||
-rwxr-xr-x | system/include/emscripten/bind.h | 17 |
2 files changed, 12 insertions, 43 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index 845bf98b..3daa4b01 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -388,37 +388,6 @@ function __embind_register_tuple(rawType, name, rawConstructor, rawDestructor) { function __embind_register_tuple_element( rawTupleType, - rawType, - getter, - setter, - context -) { - getter = FUNCTION_TABLE[getter]; - setter = FUNCTION_TABLE[setter]; - var tupleType = requireRegisteredType(rawTupleType, 'tuple'); - - var index = tupleType.elements.length; - tupleType.elements.push(undefined); - - // TODO: test incomplete registration of value tuples - whenDependentTypesAreResolved([], [rawType], function(type) { - type = type[0]; - tupleType.elements[index] = { - read: function(ptr) { - return type.fromWireType(getter(context, ptr)); - }, - write: function(ptr, o) { - var destructors = []; - setter(context, ptr, type.toWireType(destructors, o)); - runDestructors(destructors); - } - }; - return []; - }); -} - -function __embind_register_tuple_element_accessor( - rawTupleType, getterReturnType, getter, getterContext, @@ -430,11 +399,14 @@ function __embind_register_tuple_element_accessor( getter = FUNCTION_TABLE[getter]; setter = FUNCTION_TABLE[setter]; + var index = tupleType.elements.length; + tupleType.elements.push(undefined); + // TODO: test incomplete registration of value tuples whenDependentTypesAreResolved([], [getterReturnType, setterArgumentType], function(types) { var getterReturnType = types[0]; var setterArgumentType = types[1]; - tupleType.elements.push({ + tupleType.elements[index] = { read: function(ptr) { return getterReturnType.fromWireType( getter( @@ -449,7 +421,7 @@ function __embind_register_tuple_element_accessor( setterArgumentType.toWireType(destructors, o)); runDestructors(destructors); } - }); + }; return []; }); } diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h index a002ca23..a5530744 100755 --- a/system/include/emscripten/bind.h +++ b/system/include/emscripten/bind.h @@ -70,13 +70,6 @@ namespace emscripten { void _embind_register_tuple_element( TYPEID tupleType, - TYPEID elementType, - GenericFunction getter, - GenericFunction setter, - void* context); - - void _embind_register_tuple_element_accessor( - TYPEID tupleType, TYPEID getterReturnType, GenericFunction staticGetter, void* getterContext, @@ -414,8 +407,12 @@ namespace emscripten { _embind_register_tuple_element( TypeID<ClassType>::get(), TypeID<ElementType>::get(), - reinterpret_cast<GenericFunction>(&MemberAccess<ClassType, ElementType>::getWire), - reinterpret_cast<GenericFunction>(&MemberAccess<ClassType, ElementType>::setWire), + reinterpret_cast<GenericFunction>( + &MemberAccess<ClassType, ElementType>::getWire), + getContext(field), + TypeID<ElementType>::get(), + reinterpret_cast<GenericFunction>( + &MemberAccess<ClassType, ElementType>::setWire), getContext(field)); return *this; } @@ -426,7 +423,7 @@ namespace emscripten { void (*setter)(ClassType&, SetterArgumentType) ) { using namespace internal; - _embind_register_tuple_element_accessor( + _embind_register_tuple_element( TypeID<ClassType>::get(), TypeID<GetterReturnType>::get(), reinterpret_cast<GenericFunction>( |