// 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. (function CycleDetection() { const arr = [ { toLocaleString() { return [1, arr]; } } ]; assertSame('1,', arr.toLocaleString()); assertSame('1,', arr.toLocaleString()); })(); (function ThrowsError(){ function TestError() {} const arr = []; const obj = { toLocaleString(){ throw new TestError(); } }; arr[0] = obj; assertThrows(() => arr.toLocaleString(), TestError); // Verifies cycle detection still works properly after thrown error. arr[0] = { toLocaleString() { return 1; } }; assertSame('1', arr.toLocaleString()); })(); (function AccessThrowsError(){ function TestError() {} const arr = []; const obj = { get toLocaleString(){ throw new TestError(); } }; arr[0] = obj; assertThrows(() => arr.toLocaleString(), TestError); // Verifies cycle detection still works properly after thrown error. arr[0] = { toLocaleString() { return 1; } }; assertSame('1', arr.toLocaleString()); })(); (function NotCallable(){ const arr = []; const obj = { toLocaleString: 7 } arr[0] = obj; assertThrows(() => arr.toLocaleString(), TypeError, '7 is not a function'); // Verifies cycle detection still works properly after thrown error. arr[0] = { toLocaleString() { return 1; } }; assertSame('1', arr.toLocaleString()); })();