diff options
author | Chad Austin <chad@imvu.com> | 2013-03-07 15:42:13 -0800 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:25:11 +0300 |
commit | 6a0976ce2e1006cda317625e294aa878045e305a (patch) | |
tree | a1442219595ce0b43be79f1ac720cda42f3c22d7 | |
parent | 612340cec2f3761efffc450e1de0adb445a45036 (diff) |
checkpoint work towards unifying the binding type for classes and smart pointers.
-rwxr-xr-x | src/embind/embind.js | 8 | ||||
-rwxr-xr-x | system/include/emscripten/bind.h | 6 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index 5d6e6c21..83c3841f 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -491,7 +491,13 @@ RegisteredPointer.prototype.isPolymorphic = function() { RegisteredPointer.prototype.toWireType = function(destructors, handle) { var fromRawType; if (handle === null) { - return 0; // todo: maybe this should return a zero-initialized smart pointer object + if (this.isSmartPointer) { + var ptr = this.rawConstructor(0, 0); + destructors.push(this.rawDestructor, ptr); + return ptr; + } else { + return 0; + } } if (!(handle instanceof ClassHandle)) { throwBindingError('Expected pointer or null, got ' + IMVU.repr(handle)); diff --git a/system/include/emscripten/bind.h b/system/include/emscripten/bind.h index e8a8dc1d..7dcfa61b 100755 --- a/system/include/emscripten/bind.h +++ b/system/include/emscripten/bind.h @@ -543,7 +543,11 @@ namespace emscripten { typename smart_ptr_trait<SmartPointerType>::element_type* ptr, SmartPointerType* basePtr ) { - return new SmartPointerType(smart_ptr_trait<SmartPointerType>::share(*basePtr, ptr)); + if (ptr) { + return new SmartPointerType(smart_ptr_trait<SmartPointerType>::share(*basePtr, ptr)); + } else { + return new SmartPointerType; + } } template<typename PointerType> |