diff options
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js')
-rw-r--r-- | deps/v8/test/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js b/deps/v8/test/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js new file mode 100644 index 0000000000..98410d5d0e --- /dev/null +++ b/deps/v8/test/mjsunit/harmony/weakrefs/clear-clears-factory-pointer.js @@ -0,0 +1,49 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-weak-refs --expose-gc --noincremental-marking + +// Test that WeakCell.prototype.clear() also clears the WeakFactory pointer of +// WeakCell. The only way to observe this is to assert that the WeakCell no +// longer keeps its WeakFactory alive after clear() has been called. + +let weak_cell; +let weak_cell_pointing_to_factory; + +let cleanup1_call_count = 0; +let cleanup2_call_count = 0; + +let cleanup1 = function() { + ++cleanup1_call_count; +} + +let cleanup2 = function() { + ++cleanup2_call_count; +} + +let wf1 = new WeakFactory(cleanup1); + +(function(){ + let wf2 = new WeakFactory(cleanup2); + + (function() { + let object = {}; + weak_cell = wf2.makeCell(object); + // object goes out of scope. + })(); + + weak_cell_pointing_to_factory = wf1.makeCell(wf2); + // wf goes out of scope +})(); + +weak_cell.clear(); +gc(); + +// Assert that weak_cell_pointing_to_factory now got cleared. +let timeout_func = function() { + assertEquals(1, cleanup1_call_count); + assertEquals(0, cleanup2_call_count); +} + +setTimeout(timeout_func, 0); |