1 // Copyright 2016 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 var thrower = { [Symbol.toPrimitive]: () => FAIL }; 6 7 // Tests that a native conversion function is included in the 8 // stack trace. 9 function testTraceNativeConversion(nativeFunc) { 10 var nativeFuncName = nativeFunc.name; 11 try { 12 nativeFunc(thrower); 13 assertUnreachable(nativeFuncName); 14 } catch (e) { 15 assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); 16 } 17 } 18 19 testTraceNativeConversion(Math.max); 20 testTraceNativeConversion(Math.min); 21 22 function testBuiltinInStackTrace(script, nativeFuncName) { 23 try { 24 eval(script); 25 assertUnreachable(nativeFuncName); 26 } catch (e) { 27 assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); 28 } 29 } 30 31 // Use the full name ('String.getDate') in order to avoid false pass 32 // results when the method name is mentioned in the error message itself. 33 // This occurs, e.g., for Date.prototype.getYear, which uses a different code 34 // path and never hits the Generate_DatePrototype_GetField builtin. 35 testBuiltinInStackTrace("Date.prototype.getDate.call('')", "String.getDate"); 36 testBuiltinInStackTrace("Date.prototype.getUTCDate.call('')", 37 "String.getUTCDate"); 38 testBuiltinInStackTrace("Date.prototype.getTime.call('')", "String.getTime"); 39