| // 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); |
| } |
| } |
| |
| testTraceNativeConversion(Math.max); |
| testTraceNativeConversion(Math.min); |
| |
| function testBuiltinInStackTrace(script, nativeFuncName) { |
| try { |
| eval(script); |
| assertUnreachable(nativeFuncName); |
| } catch (e) { |
| assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); |
| } |
| } |
| |
| // Use the full name ('String.getDate') in order to avoid false pass |
| // results when the method name is mentioned in the error message itself. |
| // This occurs, e.g., for Date.prototype.getYear, which uses a different code |
| // path and never hits the Generate_DatePrototype_GetField builtin. |
| testBuiltinInStackTrace("Date.prototype.getDate.call('')", "String.getDate"); |
| testBuiltinInStackTrace("Date.prototype.getUTCDate.call('')", |
| "String.getUTCDate"); |
| testBuiltinInStackTrace("Date.prototype.getTime.call('')", "String.getTime"); |