// 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()); })();