| // 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. |
| |
| // Flags: --allow-natives-syntax |
| |
| (function DictionaryStringRepeatFastPath() { |
| const a = new Array(%StringMaxLength()); |
| assertTrue(%HasDictionaryElements(a)); |
| const sep = '12'; |
| assertThrows(() => a.join(sep), RangeError); |
| |
| // Verifies cycle detection still works properly after thrown error. |
| assertThrows(() => a.join(sep), RangeError); |
| |
| a.length = 3; |
| a[0] = 'a'; |
| a[1] = 'b'; |
| a[2] = 'c'; |
| assertSame('a,b,c', a.join()); |
| })(); |
| |
| (function SeparatorOverflow() { |
| const a = ['a',,,,,'b']; |
| |
| const sep = ','.repeat(%StringMaxLength()); |
| assertThrows(() => a.join(sep), RangeError); |
| |
| // Verifies cycle detection still works properly after thrown error. |
| assertThrows(() => a.join(sep), RangeError); |
| assertSame('a,,,,,b', a.join()); |
| })(); |
| |
| (function ElementOverflow() { |
| const el = ','.repeat(%StringMaxLength()); |
| const a = [el, el, el, el, el]; |
| |
| assertThrows(() => a.join(), RangeError); |
| |
| // Verifies cycle detection still works properly after thrown error. |
| assertThrows(() => a.join(), RangeError); |
| a[0] = 'a'; |
| a[1] = 'b'; |
| a[2] = 'c'; |
| a[3] = 'd'; |
| a[4] = 'e'; |
| assertSame('a,b,c,d,e', a.join()); |
| })(); |
| |
| (function ElementSeparatorOverflow() { |
| const el = ','.repeat(%StringMaxLength()); |
| const a = [el, el, el, el]; |
| |
| assertThrows(() => a.join(el), RangeError); |
| |
| // Verifies cycle detection still works properly after thrown error. |
| assertThrows(() => a.join(el), RangeError); |
| a[0] = 'a'; |
| a[1] = 'b'; |
| a[2] = 'c'; |
| a[3] = 'd'; |
| assertSame('a,b,c,d', a.join()); |
| })(); |