mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-30 11:13:51 +01:00 
			
		
		
		
	sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2016 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.
 | |
| 
 | |
| var thrower = { [Symbol.toPrimitive]: () => FAIL };
 | |
| 
 | |
| // Tests that a native conversion function is included in the
 | |
| // stack trace.
 | |
| function testTraceNativeConversion(nativeFunc) {
 | |
|   var nativeFuncName = nativeFunc.name;
 | |
|   try {
 | |
|     nativeFunc(thrower);
 | |
|     assertUnreachable(nativeFuncName);
 | |
|   } catch (e) {
 | |
|     assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // C++ builtins.
 | |
| testTraceNativeConversion(Math.acos);
 | |
| testTraceNativeConversion(Math.asin);
 | |
| testTraceNativeConversion(Math.fround);
 | |
| testTraceNativeConversion(Math.imul);
 | |
| 
 | |
| 
 | |
| function testBuiltinInStackTrace(script, expectedString) {
 | |
|   try {
 | |
|     eval(script);
 | |
|     assertUnreachable(expectedString);
 | |
|   } catch (e) {
 | |
|     assertTrue(e.stack.indexOf(expectedString) >= 0, expectedString);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // C++ builtins.
 | |
| testBuiltinInStackTrace("Boolean.prototype.toString.call(thrower);",
 | |
|                         "at Object.toString");
 | |
| 
 | |
| // Constructor builtins.
 | |
| testBuiltinInStackTrace("new Date(thrower);", "at new Date");
 | |
| 
 | |
| // Ensure we correctly pick up the receiver's string tag.
 | |
| testBuiltinInStackTrace("Math.acos(thrower);", "at Math.acos");
 | |
| testBuiltinInStackTrace("Math.asin(thrower);", "at Math.asin");
 | |
| testBuiltinInStackTrace("Math.fround(thrower);", "at Math.fround");
 | |
| testBuiltinInStackTrace("Math.imul(thrower);", "at Math.imul");
 | |
| 
 | |
| // As above, but function passed as an argument and then called.
 | |
| testBuiltinInStackTrace("((f, x) => f(x))(Math.acos, thrower);", "at acos");
 | |
| testBuiltinInStackTrace("((f, x) => f(x))(Math.asin, thrower);", "at asin");
 | |
| testBuiltinInStackTrace("((f, x) => f(x))(Math.fround, thrower);", "at fround");
 | |
| testBuiltinInStackTrace("((f, x) => f(x))(Math.imul, thrower);", "at imul");
 |