mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			922 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			922 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //@ skip if $architecture == "x86"
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var n = 1000000;
 | |
| 
 | |
| function shouldThrowTDZ(func) {
 | |
|     var hasThrown = false;
 | |
|     try {
 | |
|         func();
 | |
|     } catch(e) {
 | |
|         if (e.name.indexOf("ReferenceError") !== -1)
 | |
|             hasThrown = true;
 | |
|     }
 | |
|     if (!hasThrown)
 | |
|         throw new Error("Did not throw TDZ error");
 | |
| }
 | |
| 
 | |
| function bar(f) { }
 | |
| 
 | |
| function foo(b) {
 | |
|     let result = 0;
 | |
|     var set =  (x) => { result = x; return tdzPerpetrator; }
 | |
|     if (b) {
 | |
|         OSRExit();
 | |
|         if (b) {
 | |
|             bar(set);
 | |
|             return tdzPerpetrator;
 | |
|         }
 | |
|     }
 | |
|     let tdzPerpetrator;
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| noInline(bar);
 | |
| noInline(foo);
 | |
| noInline(shouldThrowTDZ);
 | |
| 
 | |
| for (var i = 0; i < n; i++) {
 | |
|     var bool = !(i % 100);
 | |
|     if (bool)
 | |
|         shouldThrowTDZ(()=> { foo(bool); });
 | |
|     else {
 | |
|         var result = foo(bool);
 | |
|         if (result != 0)
 | |
|             throw "Error: bad result: " + result;
 | |
|     }
 | |
| }
 |