| // 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 Throws() { |
| function TestError() {} |
| |
| let callCount = 0; |
| const a = { |
| 0: 1, |
| 1: 2, |
| get length() { |
| callCount++; |
| throw new TestError(); |
| } |
| }; |
| assertThrows(() => Array.prototype.join.call(a), TestError); |
| assertSame(1, callCount); |
| |
| // Verifies cycle detection still works properly after thrown error. |
| Object.defineProperty(a, 'length', { |
| get() { |
| callCount++; |
| return 2; |
| } |
| }); |
| assertSame('1,2', Array.prototype.join.call(a)); |
| assertSame(2, callCount); |
| })(); |