diff options
Diffstat (limited to 'src/embind/embind.js')
-rwxr-xr-x | src/embind/embind.js | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index e02b9e01..b9a16fbb 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -407,12 +407,11 @@ function __embind_register_struct_field( }; } -function RegisteredPointer(Handle, isPolymorphic, isSmartPointer, rawGetPointee, rawConstructor, rawDestructor) { +function RegisteredPointer(Handle, isPolymorphic, isSmartPointer, rawGetPointee, rawDestructor) { this.Handle = Handle; this.isPolymorphic = isPolymorphic; this.isSmartPointer = isSmartPointer; this.rawGetPointee = rawGetPointee; - this.rawConstructor = rawConstructor; this.rawDestructor = rawDestructor; } @@ -429,29 +428,19 @@ RegisteredPointer.prototype.toWireType = function(destructors, o) { } }; -RegisteredPointer.prototype.toWireTypeAutoUpcast = function(destructors, handle) { - var fromRawType; - if (!handle) { - return null; - } - if (handle.pointeeType.isPolymorphic) { - fromRawType = handle.pointeeType.getDynamicRawPointerType(handle.ptr); - } else { - fromRawType = handle.pointeeType.rawType; - } - if (fromRawType == this.pointeeType.rawType) { - return this.isSmartPointer ? handle.smartPointer : handle.ptr; - } - var ptr = ___staticPointerCast(handle.ptr, fromRawType, this.pointeeType.rawType); +// todo: distinguish ptr and rawPtr +RegisteredPointer.prototype.toWireTypeAutoUpcast = function(destructors, o) { if (this.isSmartPointer) { - var smartPtr = _malloc(16); - // todo: this does not create a pointer that shares the reference count !?!? - handle.pointeeType.smartPointerType.rawConstructor(smartPtr, ptr); - ptr = smartPtr; - destructors.push(handle.pointeeType.smartPointerType.rawDestructor); - destructors.push(ptr); + return this.toWireType(destructors, o); // for now + } else { + if (o.pointeeType.isPolymorphic) { + var dynamicType = o.pointeeType.getDynamicRawPointerType(o.ptr); + return ___staticPointerCast(o.ptr, dynamicType, this.pointeeType.rawType); + } else { + return ___staticPointerCast(o.ptr, o.pointeeType.rawType, this.pointeeType.rawType); + } + // todo: this cast can fail } - return ptr; }; RegisteredPointer.prototype.getPointee = function(ptr) { @@ -534,13 +523,11 @@ function __embind_register_smart_ptr( rawPointeeType, isPolymorphic, name, - rawConstructor, rawDestructor, rawGetPointee ) { name = Pointer_stringify(name); var pointeeType = requireRegisteredType(rawPointeeType, 'class'); - rawConstructor = FUNCTION_TABLE[rawConstructor]; rawDestructor = FUNCTION_TABLE[rawDestructor]; rawGetPointee = FUNCTION_TABLE[rawGetPointee]; @@ -581,7 +568,7 @@ function __embind_register_smart_ptr( this.smartPointer = undefined; this.ptr = undefined; }; - var registeredPointer = new RegisteredPointer(Handle, isPolymorphic, true, rawGetPointee, rawConstructor, rawDestructor); + var registeredPointer = new RegisteredPointer(Handle, isPolymorphic, true, rawGetPointee, rawDestructor); registeredPointer.pointeeType = pointeeType; pointeeType.smartPointerType = registerType(rawType, name, registeredPointer); } |