diff options
author | Chad Austin <chad@imvu.com> | 2014-05-08 21:52:21 -0700 |
---|---|---|
committer | Bruce Mitchener <bruce.mitchener@gmail.com> | 2014-05-21 22:59:01 +0700 |
commit | 3147a2175cc90c1ceca368979bad72870b02561b (patch) | |
tree | a502276fa160ddf7937782ffd05a6c3ce47d0149 | |
parent | c75048adf764b9f14ed7a91dc46dfaee66dcbf3a (diff) |
handle some scenarios where you mix delete() and deleteLater()
-rw-r--r-- | src/embind/embind.js | 5 | ||||
-rw-r--r-- | tests/embind/embind.test.js | 26 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index f9bfa9e8..27fa87b8 100644 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -1322,8 +1322,7 @@ ClassHandle.prototype['delete'] = function ClassHandle_delete() { throwInstanceAlreadyDeleted(this); } - // TODO: test for multiple deleteLater() on JS instance handle - if (this.$$.deleteScheduled) { + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); } @@ -1348,7 +1347,7 @@ ClassHandle.prototype['deleteLater'] = function deleteLater() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } - if (this.$$.deleteScheduled) { + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); } deletionQueue.push(this); diff --git a/tests/embind/embind.test.js b/tests/embind/embind.test.js index b174b52d..bc0a6154 100644 --- a/tests/embind/embind.test.js +++ b/tests/embind/embind.test.js @@ -1799,6 +1799,32 @@ module({ assert.equal(impl, rv); rv.delete(); }); + + test("deleteLater() works for JavaScript implementations", function() { + var parent = cm.HeldAbstractClass; + var C = parent.extend("C", { + method: function() { + } + }); + var impl = new C; + var rv = cm.passHeldAbstractClass(impl); + impl.deleteLater(); + rv.deleteLater(); + cm.flushPendingDeletes(); + }); + + test("deleteLater() combined with delete() works for JavaScript implementations", function() { + var parent = cm.HeldAbstractClass; + var C = parent.extend("C", { + method: function() { + } + }); + var impl = new C; + var rv = cm.passHeldAbstractClass(impl); + impl.deleteLater(); + rv.delete(); + cm.flushPendingDeletes(); + }); }); BaseFixture.extend("registration order", function() { |