mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-25 17:53:53 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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
 | |
| 
 | |
| let cleanup_call_count = 0;
 | |
| let cleanup_holdings_count = 0;
 | |
| let cleanup = function(iter) {
 | |
|   for (holdings of iter) {
 | |
|     ++cleanup_holdings_count;
 | |
|   }
 | |
|   ++cleanup_call_count;
 | |
| }
 | |
| 
 | |
| let fg1 = new FinalizationGroup(cleanup);
 | |
| let fg2 = new FinalizationGroup(cleanup);
 | |
| 
 | |
| // Create two objects and register them in FinalizationGroups. The objects need
 | |
| // to be inside a closure so that we can reliably kill them!
 | |
| 
 | |
| (function() {
 | |
|   let object1 = {};
 | |
|   fg1.register(object1, "holdings1");
 | |
| 
 | |
|   let object2 = {};
 | |
|   fg2.register(object2, "holdings2");
 | |
| 
 | |
|   // object1 and object2 go out of scope.
 | |
| })();
 | |
| 
 | |
| // This GC will discover dirty WeakCells and schedule cleanup.
 | |
| gc();
 | |
| assertEquals(0, cleanup_call_count);
 | |
| 
 | |
| // Assert that the cleanup function was called and iterated the holdings.
 | |
| let timeout_func = function() {
 | |
|   assertEquals(2, cleanup_call_count);
 | |
|   assertEquals(2, cleanup_holdings_count);
 | |
| }
 | |
| 
 | |
| setTimeout(timeout_func, 0);
 |