1
// Copyright 2011 the V8 project authors. All rights reserved.
2
// Redistribution and use in source and binary forms, with or without
3
// modification, are permitted provided that the following conditions are
6
// * Redistributions of source code must retain the above copyright
7
// notice, this list of conditions and the following disclaimer.
8
// * Redistributions in binary form must reproduce the above
9
// copyright notice, this list of conditions and the following
10
// disclaimer in the documentation and/or other materials provided
11
// with the distribution.
12
// * Neither the name of Google Inc. nor the names of its
13
// contributors may be used to endorse or promote products derived
14
// from this software without specific prior written permission.
16
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
// Getting property names of an object with a prototype chain that
29
// triggers dictionary elements in GetLocalPropertyNames() shouldn't
32
// Flags: --allow-natives-syntax
40
this.objects = new Object();
58
// Force dictionary-based properties
59
for (x=1;x<1000;x++) {
77
%SetHiddenPrototype(obj4, obj3);
78
%SetHiddenPrototype(obj3, obj2);
79
%SetHiddenPrototype(obj2, obj1);
81
function contains(a, obj) {
82
for(var i = 0; i < a.length; i++) {
89
names = %GetLocalPropertyNames(obj4);
90
assertEquals(1021, names.length);
91
assertTrue(contains(names, "baz"));
92
assertTrue(contains(names, "boo"));
93
assertTrue(contains(names, "foo"));
94
assertTrue(contains(names, "fuz"));
95
assertTrue(contains(names, "fuz1"));
96
assertTrue(contains(names, "fuz2"));
97
assertTrue(contains(names, "fuz3"));
98
assertTrue(contains(names, "fuz4"));
99
assertTrue(contains(names, "fuz5"));
100
assertTrue(contains(names, "fuz6"));
101
assertTrue(contains(names, "fuz7"));
102
assertTrue(contains(names, "fuz8"));
103
assertTrue(contains(names, "fuz9"));
104
assertTrue(contains(names, "fuz10"));
105
assertTrue(contains(names, "fuz11"));
106
assertTrue(contains(names, "fuz12"));
107
assertTrue(contains(names, "fuz13"));
108
assertTrue(contains(names, "fuz14"));
109
assertTrue(contains(names, "fuz15"));
110
assertTrue(contains(names, "fuz16"));
111
assertTrue(contains(names, "fuz17"));
112
assertFalse(names[1020] == undefined);