blob: b0a981d6c21103d52a470c5c6a1096dab57412de [file] [log] [blame]
Ben Murdoch3ef787d2012-04-12 10:51:47 +01001// Copyright 2012 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
Ben Murdochb8a8cc12014-11-26 15:28:44 +000028// Flags: --allow-natives-syntax --inline-construct
29// Flags: --max-inlined-source-size=999999 --max-inlined-nodes=999999
30// Flags: --max-inlined-nodes-cumulative=999999
Ben Murdoch3ef787d2012-04-12 10:51:47 +010031
32// Test that huge constructors (more than 256 this assignments) are
33// handled correctly.
34
35// Test huge constructor when being inlined into hydrogen.
36function test() {
37 return new huge();
38}
39test();
40test();
41%OptimizeFunctionOnNextCall(test);
42var o = test();
43assertEquals(1, o.foo1);
44assertEquals(257, o.foo257);
45
46// Test huge constructor with specialized constructor stub.
47var o = new huge();
48assertEquals(1, o.foo1);
49assertEquals(257, o.foo257);
50
51// The huge constructor, nothing interesting beyond this point.
52function huge() {
53 this.foo1 = 1;
54 this.foo2 = 2;
55 this.foo3 = 3;
56 this.foo4 = 4;
57 this.foo5 = 5;
58 this.foo6 = 6;
59 this.foo7 = 7;
60 this.foo8 = 8;
61 this.foo9 = 9;
62 this.foo10 = 10;
63 this.foo11 = 11;
64 this.foo12 = 12;
65 this.foo13 = 13;
66 this.foo14 = 14;
67 this.foo15 = 15;
68 this.foo16 = 16;
69 this.foo17 = 17;
70 this.foo18 = 18;
71 this.foo19 = 19;
72 this.foo20 = 20;
73 this.foo21 = 21;
74 this.foo22 = 22;
75 this.foo23 = 23;
76 this.foo24 = 24;
77 this.foo25 = 25;
78 this.foo26 = 26;
79 this.foo27 = 27;
80 this.foo28 = 28;
81 this.foo29 = 29;
82 this.foo30 = 30;
83 this.foo31 = 31;
84 this.foo32 = 32;
85 this.foo33 = 33;
86 this.foo34 = 34;
87 this.foo35 = 35;
88 this.foo36 = 36;
89 this.foo37 = 37;
90 this.foo38 = 38;
91 this.foo39 = 39;
92 this.foo40 = 40;
93 this.foo41 = 41;
94 this.foo42 = 42;
95 this.foo43 = 43;
96 this.foo44 = 44;
97 this.foo45 = 45;
98 this.foo46 = 46;
99 this.foo47 = 47;
100 this.foo48 = 48;
101 this.foo49 = 49;
102 this.foo50 = 50;
103 this.foo51 = 51;
104 this.foo52 = 52;
105 this.foo53 = 53;
106 this.foo54 = 54;
107 this.foo55 = 55;
108 this.foo56 = 56;
109 this.foo57 = 57;
110 this.foo58 = 58;
111 this.foo59 = 59;
112 this.foo60 = 60;
113 this.foo61 = 61;
114 this.foo62 = 62;
115 this.foo63 = 63;
116 this.foo64 = 64;
117 this.foo65 = 65;
118 this.foo66 = 66;
119 this.foo67 = 67;
120 this.foo68 = 68;
121 this.foo69 = 69;
122 this.foo70 = 70;
123 this.foo71 = 71;
124 this.foo72 = 72;
125 this.foo73 = 73;
126 this.foo74 = 74;
127 this.foo75 = 75;
128 this.foo76 = 76;
129 this.foo77 = 77;
130 this.foo78 = 78;
131 this.foo79 = 79;
132 this.foo80 = 80;
133 this.foo81 = 81;
134 this.foo82 = 82;
135 this.foo83 = 83;
136 this.foo84 = 84;
137 this.foo85 = 85;
138 this.foo86 = 86;
139 this.foo87 = 87;
140 this.foo88 = 88;
141 this.foo89 = 89;
142 this.foo90 = 90;
143 this.foo91 = 91;
144 this.foo92 = 92;
145 this.foo93 = 93;
146 this.foo94 = 94;
147 this.foo95 = 95;
148 this.foo96 = 96;
149 this.foo97 = 97;
150 this.foo98 = 98;
151 this.foo99 = 99;
152 this.foo100 = 100;
153 this.foo101 = 101;
154 this.foo102 = 102;
155 this.foo103 = 103;
156 this.foo104 = 104;
157 this.foo105 = 105;
158 this.foo106 = 106;
159 this.foo107 = 107;
160 this.foo108 = 108;
161 this.foo109 = 109;
162 this.foo110 = 110;
163 this.foo111 = 111;
164 this.foo112 = 112;
165 this.foo113 = 113;
166 this.foo114 = 114;
167 this.foo115 = 115;
168 this.foo116 = 116;
169 this.foo117 = 117;
170 this.foo118 = 118;
171 this.foo119 = 119;
172 this.foo120 = 120;
173 this.foo121 = 121;
174 this.foo122 = 122;
175 this.foo123 = 123;
176 this.foo124 = 124;
177 this.foo125 = 125;
178 this.foo126 = 126;
179 this.foo127 = 127;
180 this.foo128 = 128;
181 this.foo129 = 129;
182 this.foo130 = 130;
183 this.foo131 = 131;
184 this.foo132 = 132;
185 this.foo133 = 133;
186 this.foo134 = 134;
187 this.foo135 = 135;
188 this.foo136 = 136;
189 this.foo137 = 137;
190 this.foo138 = 138;
191 this.foo139 = 139;
192 this.foo140 = 140;
193 this.foo141 = 141;
194 this.foo142 = 142;
195 this.foo143 = 143;
196 this.foo144 = 144;
197 this.foo145 = 145;
198 this.foo146 = 146;
199 this.foo147 = 147;
200 this.foo148 = 148;
201 this.foo149 = 149;
202 this.foo150 = 150;
203 this.foo151 = 151;
204 this.foo152 = 152;
205 this.foo153 = 153;
206 this.foo154 = 154;
207 this.foo155 = 155;
208 this.foo156 = 156;
209 this.foo157 = 157;
210 this.foo158 = 158;
211 this.foo159 = 159;
212 this.foo160 = 160;
213 this.foo161 = 161;
214 this.foo162 = 162;
215 this.foo163 = 163;
216 this.foo164 = 164;
217 this.foo165 = 165;
218 this.foo166 = 166;
219 this.foo167 = 167;
220 this.foo168 = 168;
221 this.foo169 = 169;
222 this.foo170 = 170;
223 this.foo171 = 171;
224 this.foo172 = 172;
225 this.foo173 = 173;
226 this.foo174 = 174;
227 this.foo175 = 175;
228 this.foo176 = 176;
229 this.foo177 = 177;
230 this.foo178 = 178;
231 this.foo179 = 179;
232 this.foo180 = 180;
233 this.foo181 = 181;
234 this.foo182 = 182;
235 this.foo183 = 183;
236 this.foo184 = 184;
237 this.foo185 = 185;
238 this.foo186 = 186;
239 this.foo187 = 187;
240 this.foo188 = 188;
241 this.foo189 = 189;
242 this.foo190 = 190;
243 this.foo191 = 191;
244 this.foo192 = 192;
245 this.foo193 = 193;
246 this.foo194 = 194;
247 this.foo195 = 195;
248 this.foo196 = 196;
249 this.foo197 = 197;
250 this.foo198 = 198;
251 this.foo199 = 199;
252 this.foo200 = 200;
253 this.foo201 = 201;
254 this.foo202 = 202;
255 this.foo203 = 203;
256 this.foo204 = 204;
257 this.foo205 = 205;
258 this.foo206 = 206;
259 this.foo207 = 207;
260 this.foo208 = 208;
261 this.foo209 = 209;
262 this.foo210 = 210;
263 this.foo211 = 211;
264 this.foo212 = 212;
265 this.foo213 = 213;
266 this.foo214 = 214;
267 this.foo215 = 215;
268 this.foo216 = 216;
269 this.foo217 = 217;
270 this.foo218 = 218;
271 this.foo219 = 219;
272 this.foo220 = 220;
273 this.foo221 = 221;
274 this.foo222 = 222;
275 this.foo223 = 223;
276 this.foo224 = 224;
277 this.foo225 = 225;
278 this.foo226 = 226;
279 this.foo227 = 227;
280 this.foo228 = 228;
281 this.foo229 = 229;
282 this.foo230 = 230;
283 this.foo231 = 231;
284 this.foo232 = 232;
285 this.foo233 = 233;
286 this.foo234 = 234;
287 this.foo235 = 235;
288 this.foo236 = 236;
289 this.foo237 = 237;
290 this.foo238 = 238;
291 this.foo239 = 239;
292 this.foo240 = 240;
293 this.foo241 = 241;
294 this.foo242 = 242;
295 this.foo243 = 243;
296 this.foo244 = 244;
297 this.foo245 = 245;
298 this.foo246 = 246;
299 this.foo247 = 247;
300 this.foo248 = 248;
301 this.foo249 = 249;
302 this.foo250 = 250;
303 this.foo251 = 251;
304 this.foo252 = 252;
305 this.foo253 = 253;
306 this.foo254 = 254;
307 this.foo255 = 255;
308 this.foo256 = 256;
309 this.foo257 = 257;
310}