~ubuntu-branches/ubuntu/trusty/libv8/trusty

« back to all changes in this revision

Viewing changes to test/mjsunit/regress/regress-91517.js

  • Committer: Package Import Robot
  • Author(s): Jérémy Lal
  • Date: 2012-02-20 14:08:17 UTC
  • mfrom: (15.1.24 sid)
  • Revision ID: package-import@ubuntu.com-20120220140817-bsvmeoa4sxsj5hbz
Tags: 3.7.12.22-3
Fix mipsel build, allow test debug-step-3 to fail (non-crucial)

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
4
 
// met:
5
 
//
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.
15
 
//
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.
27
 
 
28
 
// Getting property names of an object with a prototype chain that
29
 
// triggers dictionary elements in GetLocalPropertyNames() shouldn't
30
 
// crash the runtime
31
 
 
32
 
// Flags: --allow-natives-syntax
33
 
 
34
 
function Object1() {
35
 
  this.foo = 1;
36
 
}
37
 
 
38
 
function Object2() {
39
 
  this.fuz = 2;
40
 
  this.objects = new Object();
41
 
  this.fuz1 = 2;
42
 
  this.fuz2 = 2;
43
 
  this.fuz3 = 2;
44
 
  this.fuz4 = 2;
45
 
  this.fuz5 = 2;
46
 
  this.fuz6 = 2;
47
 
  this.fuz7 = 2;
48
 
  this.fuz8 = 2;
49
 
  this.fuz9 = 2;
50
 
  this.fuz10 = 2;
51
 
  this.fuz11 = 2;
52
 
  this.fuz12 = 2;
53
 
  this.fuz13 = 2;
54
 
  this.fuz14 = 2;
55
 
  this.fuz15 = 2;
56
 
  this.fuz16 = 2;
57
 
  this.fuz17 = 2;
58
 
  // Force dictionary-based properties
59
 
  for (x=1;x<1000;x++) {
60
 
    this["sdf" + x] = 2;
61
 
  }
62
 
}
63
 
 
64
 
function Object3() {
65
 
  this.boo = 3;
66
 
}
67
 
 
68
 
function Object4() {
69
 
  this.baz = 4;
70
 
}
71
 
 
72
 
obj1 = new Object1();
73
 
obj2 = new Object2();
74
 
obj3 = new Object3();
75
 
obj4 = new Object4();
76
 
 
77
 
%SetHiddenPrototype(obj4, obj3);
78
 
%SetHiddenPrototype(obj3, obj2);
79
 
%SetHiddenPrototype(obj2, obj1);
80
 
 
81
 
function contains(a, obj) {
82
 
  for(var i = 0; i < a.length; i++) {
83
 
    if(a[i] === obj){
84
 
      return true;
85
 
    }
86
 
  }
87
 
  return false;
88
 
}
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);