1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Note in general that "arguments.foo" and "var o = arguments; o.foo" 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// are treated differently by full-codegen, and so both cases need to be 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// tested. 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestDirectArgumentsIteratorProperty() { 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(arguments.hasOwnProperty(Symbol.iterator)); 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(arguments.propertyIsEnumerable(Symbol.iterator)); 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var descriptor = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator); 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(descriptor.writable); 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(descriptor.enumerable); 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(descriptor.configurable); 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(descriptor.value, [][Symbol.iterator]); 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments[Symbol.iterator], [][Symbol.iterator]); 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestDirectArgumentsIteratorProperty(); 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestIndirectArgumentsIteratorProperty() { 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var o = arguments; 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(o.hasOwnProperty(Symbol.iterator)); 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(o.propertyIsEnumerable(Symbol.iterator)); 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(o[Symbol.iterator], [][Symbol.iterator]); 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestIndirectArgumentsIteratorProperty(); 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction assertIteratorResult(value, done, result) { 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals({value: value, done: done}, result); 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestDirectValues1(a, b, c) { 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = arguments[Symbol.iterator](); 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestDirectValues1(1, 2, 3); 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestIndirectValues1(a, b, c) { 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var args = arguments; 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = args[Symbol.iterator](); 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestIndirectValues1(1, 2, 3); 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestDirectValues2(a, b, c) { 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = arguments[Symbol.iterator](); 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments[3] = 4; 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 4; 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestDirectValues2(1, 2, 3); 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestIndirectValues2(a, b, c) { 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var args = arguments; 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = args[Symbol.iterator](); 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments[3] = 4; 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 4; 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestIndirectValues2(1, 2, 3); 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestDirectValues3(a, b, c) { 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = arguments[Symbol.iterator](); 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 2; 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestDirectValues3(1, 2, 3); 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestIndirectValues3(a, b, c) { 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var args = arguments; 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = args[Symbol.iterator](); 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 2; 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestIndirectValues3(1, 2, 3); 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestDirectValues4(a, b, c) { 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = arguments[Symbol.iterator](); 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 4; 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, false, iterator.next()); 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestDirectValues4(1, 2, 3); 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestIndirectValues4(a, b, c) { 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var args = arguments; 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iterator = args[Symbol.iterator](); 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(a, false, iterator.next()); 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(b, false, iterator.next()); 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(c, false, iterator.next()); 131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments.length = 4; 133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, false, iterator.next()); 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertIteratorResult(undefined, true, iterator.next()); 135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestIndirectValues4(1, 2, 3); 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestForOf() { 140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var i = 0; 141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var value of arguments) { 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments[i++], value); 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments.length, i); 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestForOf(1, 2, 3, 4, 5); 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestAssignmentToIterator() { 151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var i = 0; 152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments[Symbol.iterator] = [].entries; 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var entry of arguments) { 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals([i, arguments[i]], entry); 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch i++; 156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 157b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 158b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments.length, i); 159b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestAssignmentToIterator(1, 2, 3, 4, 5); 161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestArgumentsMutation() { 164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var i = 0; 165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var x of arguments) { 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments[i], x); 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arguments[i+1] *= 2; 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch i++; 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments.length, i); 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestArgumentsMutation(1, 2, 3, 4, 5); 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestSloppyArgumentsAliasing(a0, a1, a2, a3, a4) { 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var i = 0; 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var x of arguments) { 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments[i], x); 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a0 = a1; a1 = a2; a3 = a4; 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch i++; 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments.length, i); 185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestSloppyArgumentsAliasing(1, 2, 3, 4, 5); 187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestStrictArgumentsAliasing(a0, a1, a2, a3, a4) { 190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "use strict"; 191b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var i = 0; 192b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (var x of arguments) { 193b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a0 = a1; a1 = a2; a3 = a4; 194b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments[i], x); 195b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch i++; 196b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 197b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(arguments.length, i); 199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestStrictArgumentsAliasing(1, 2, 3, 4, 5); 201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction TestArgumentsAsProto() { 204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch "use strict"; 205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var o = {__proto__:arguments}; 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], o[Symbol.iterator]); 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Make o dict-mode. 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch %OptimizeObjectForAddingMultipleProperties(o, 0); 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(o.hasOwnProperty(Symbol.iterator)); 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], o[Symbol.iterator]); 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch o[Symbol.iterator] = 10; 213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(o.hasOwnProperty(Symbol.iterator)); 214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(10, o[Symbol.iterator]); 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], arguments[Symbol.iterator]); 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Frozen o. 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch o = Object.freeze({__proto__:arguments}); 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], o[Symbol.iterator]); 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(o.hasOwnProperty(Symbol.iterator)); 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], o[Symbol.iterator]); 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // This should throw, but currently it doesn't, because 223b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // ExecutableAccessorInfo callbacks don't see the current strict mode. 224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // See note in accessors.cc:SetPropertyOnInstanceIfInherited. 225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch o[Symbol.iterator] = 10; 226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(o.hasOwnProperty(Symbol.iterator)); 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals([][Symbol.iterator], o[Symbol.iterator]); 228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertSame([][Symbol.iterator], arguments[Symbol.iterator]); 229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 230b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTestArgumentsAsProto(); 231