OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --allow-natives-syntax | 5 // Flags: --allow-natives-syntax |
6 | 6 |
7 | 7 |
8 // Note in general that "arguments.foo" and "var o = arguments; o.foo" | 8 // Note in general that "arguments.foo" and "var o = arguments; o.foo" |
9 // are treated differently by full-codegen, and so both cases need to be | 9 // are treated differently by full-codegen, and so both cases need to be |
10 // tested. | 10 // tested. |
11 | 11 |
12 function TestDirectArgumentsIteratorProperty() { | 12 function TestDirectArgumentsIteratorProperty() { |
13 assertTrue(arguments.hasOwnProperty(Symbol.iterator)); | 13 assertTrue(arguments.hasOwnProperty(Symbol.iterator)); |
14 assertFalse(arguments.propertyIsEnumerable(Symbol.iterator)); | 14 assertFalse(arguments.propertyIsEnumerable(Symbol.iterator)); |
15 var descriptor = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator); | 15 var descriptor = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator); |
16 assertTrue(descriptor.writable); | 16 assertTrue(descriptor.writable); |
17 assertFalse(descriptor.enumerable); | 17 assertFalse(descriptor.enumerable); |
18 assertTrue(descriptor.configurable); | 18 assertTrue(descriptor.configurable); |
19 assertEquals(descriptor.value, [].values); | 19 assertEquals(descriptor.value, [][Symbol.iterator]); |
20 assertEquals(arguments[Symbol.iterator], [].values); | 20 assertEquals(arguments[Symbol.iterator], [][Symbol.iterator]); |
21 } | 21 } |
22 TestDirectArgumentsIteratorProperty(); | 22 TestDirectArgumentsIteratorProperty(); |
23 | 23 |
24 | 24 |
25 function TestIndirectArgumentsIteratorProperty() { | 25 function TestIndirectArgumentsIteratorProperty() { |
26 var o = arguments; | 26 var o = arguments; |
27 assertTrue(o.hasOwnProperty(Symbol.iterator)); | 27 assertTrue(o.hasOwnProperty(Symbol.iterator)); |
28 assertFalse(o.propertyIsEnumerable(Symbol.iterator)); | 28 assertFalse(o.propertyIsEnumerable(Symbol.iterator)); |
29 assertEquals(o[Symbol.iterator], [].values); | 29 assertEquals(o[Symbol.iterator], [][Symbol.iterator]); |
30 } | 30 } |
31 TestIndirectArgumentsIteratorProperty(); | 31 TestIndirectArgumentsIteratorProperty(); |
32 | 32 |
33 | 33 |
34 function assertIteratorResult(value, done, result) { | 34 function assertIteratorResult(value, done, result) { |
35 assertEquals({value: value, done: done}, result); | 35 assertEquals({value: value, done: done}, result); |
36 } | 36 } |
37 | 37 |
38 | 38 |
39 function TestDirectValues1(a, b, c) { | 39 function TestDirectValues1(a, b, c) { |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 | 197 |
198 assertEquals(arguments.length, i); | 198 assertEquals(arguments.length, i); |
199 } | 199 } |
200 TestStrictArgumentsAliasing(1, 2, 3, 4, 5); | 200 TestStrictArgumentsAliasing(1, 2, 3, 4, 5); |
201 | 201 |
202 | 202 |
203 function TestArgumentsAsProto() { | 203 function TestArgumentsAsProto() { |
204 "use strict"; | 204 "use strict"; |
205 | 205 |
206 var o = {__proto__:arguments}; | 206 var o = {__proto__:arguments}; |
207 assertSame([].values, o[Symbol.iterator]); | 207 assertSame([][Symbol.iterator], o[Symbol.iterator]); |
208 // Make o dict-mode. | 208 // Make o dict-mode. |
209 %OptimizeObjectForAddingMultipleProperties(o, 0); | 209 %OptimizeObjectForAddingMultipleProperties(o, 0); |
210 assertFalse(o.hasOwnProperty(Symbol.iterator)); | 210 assertFalse(o.hasOwnProperty(Symbol.iterator)); |
211 assertSame([].values, o[Symbol.iterator]); | 211 assertSame([][Symbol.iterator], o[Symbol.iterator]); |
212 o[Symbol.iterator] = 10; | 212 o[Symbol.iterator] = 10; |
213 assertTrue(o.hasOwnProperty(Symbol.iterator)); | 213 assertTrue(o.hasOwnProperty(Symbol.iterator)); |
214 assertEquals(10, o[Symbol.iterator]); | 214 assertEquals(10, o[Symbol.iterator]); |
215 assertSame([].values, arguments[Symbol.iterator]); | 215 assertSame([][Symbol.iterator], arguments[Symbol.iterator]); |
216 | 216 |
217 // Frozen o. | 217 // Frozen o. |
218 o = Object.freeze({__proto__:arguments}); | 218 o = Object.freeze({__proto__:arguments}); |
219 assertSame([].values, o[Symbol.iterator]); | 219 assertSame([][Symbol.iterator], o[Symbol.iterator]); |
220 assertFalse(o.hasOwnProperty(Symbol.iterator)); | 220 assertFalse(o.hasOwnProperty(Symbol.iterator)); |
221 assertSame([].values, o[Symbol.iterator]); | 221 assertSame([][Symbol.iterator], o[Symbol.iterator]); |
222 // This should throw, but currently it doesn't, because | 222 // This should throw, but currently it doesn't, because |
223 // ExecutableAccessorInfo callbacks don't see the current strict mode. | 223 // ExecutableAccessorInfo callbacks don't see the current strict mode. |
224 // See note in accessors.cc:SetPropertyOnInstanceIfInherited. | 224 // See note in accessors.cc:SetPropertyOnInstanceIfInherited. |
225 o[Symbol.iterator] = 10; | 225 o[Symbol.iterator] = 10; |
226 assertFalse(o.hasOwnProperty(Symbol.iterator)); | 226 assertFalse(o.hasOwnProperty(Symbol.iterator)); |
227 assertEquals([].values, o[Symbol.iterator]); | 227 assertEquals([][Symbol.iterator], o[Symbol.iterator]); |
228 assertSame([].values, arguments[Symbol.iterator]); | 228 assertSame([][Symbol.iterator], arguments[Symbol.iterator]); |
229 } | 229 } |
230 TestArgumentsAsProto(); | 230 TestArgumentsAsProto(); |
OLD | NEW |