// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Flags: --allow-natives-syntax // Flags: --max-inlined-bytecode-size=999999 // Flags: --max-inlined-bytecode-size-cumulative=999999 // Test that huge constructors (more than 256 this assignments) are // handled correctly. // Test huge constructor when being inlined into hydrogen. function test() { return new huge(); } %PrepareFunctionForOptimization(test); test(); test(); %OptimizeFunctionOnNextCall(test); var o = test(); assertEquals(1, o.foo1); assertEquals(257, o.foo257); // Test huge constructor with specialized constructor stub. var o = new huge(); assertEquals(1, o.foo1); assertEquals(257, o.foo257); // The huge constructor, nothing interesting beyond this point. function huge() { this.foo1 = 1; this.foo2 = 2; this.foo3 = 3; this.foo4 = 4; this.foo5 = 5; this.foo6 = 6; this.foo7 = 7; this.foo8 = 8; this.foo9 = 9; this.foo10 = 10; this.foo11 = 11; this.foo12 = 12; this.foo13 = 13; this.foo14 = 14; this.foo15 = 15; this.foo16 = 16; this.foo17 = 17; this.foo18 = 18; this.foo19 = 19; this.foo20 = 20; this.foo21 = 21; this.foo22 = 22; this.foo23 = 23; this.foo24 = 24; this.foo25 = 25; this.foo26 = 26; this.foo27 = 27; this.foo28 = 28; this.foo29 = 29; this.foo30 = 30; this.foo31 = 31; this.foo32 = 32; this.foo33 = 33; this.foo34 = 34; this.foo35 = 35; this.foo36 = 36; this.foo37 = 37; this.foo38 = 38; this.foo39 = 39; this.foo40 = 40; this.foo41 = 41; this.foo42 = 42; this.foo43 = 43; this.foo44 = 44; this.foo45 = 45; this.foo46 = 46; this.foo47 = 47; this.foo48 = 48; this.foo49 = 49; this.foo50 = 50; this.foo51 = 51; this.foo52 = 52; this.foo53 = 53; this.foo54 = 54; this.foo55 = 55; this.foo56 = 56; this.foo57 = 57; this.foo58 = 58; this.foo59 = 59; this.foo60 = 60; this.foo61 = 61; this.foo62 = 62; this.foo63 = 63; this.foo64 = 64; this.foo65 = 65; this.foo66 = 66; this.foo67 = 67; this.foo68 = 68; this.foo69 = 69; this.foo70 = 70; this.foo71 = 71; this.foo72 = 72; this.foo73 = 73; this.foo74 = 74; this.foo75 = 75; this.foo76 = 76; this.foo77 = 77; this.foo78 = 78; this.foo79 = 79; this.foo80 = 80; this.foo81 = 81; this.foo82 = 82; this.foo83 = 83; this.foo84 = 84; this.foo85 = 85; this.foo86 = 86; this.foo87 = 87; this.foo88 = 88; this.foo89 = 89; this.foo90 = 90; this.foo91 = 91; this.foo92 = 92; this.foo93 = 93; this.foo94 = 94; this.foo95 = 95; this.foo96 = 96; this.foo97 = 97; this.foo98 = 98; this.foo99 = 99; this.foo100 = 100; this.foo101 = 101; this.foo102 = 102; this.foo103 = 103; this.foo104 = 104; this.foo105 = 105; this.foo106 = 106; this.foo107 = 107; this.foo108 = 108; this.foo109 = 109; this.foo110 = 110; this.foo111 = 111; this.foo112 = 112; this.foo113 = 113; this.foo114 = 114; this.foo115 = 115; this.foo116 = 116; this.foo117 = 117; this.foo118 = 118; this.foo119 = 119; this.foo120 = 120; this.foo121 = 121; this.foo122 = 122; this.foo123 = 123; this.foo124 = 124; this.foo125 = 125; this.foo126 = 126; this.foo127 = 127; this.foo128 = 128; this.foo129 = 129; this.foo130 = 130; this.foo131 = 131; this.foo132 = 132; this.foo133 = 133; this.foo134 = 134; this.foo135 = 135; this.foo136 = 136; this.foo137 = 137; this.foo138 = 138; this.foo139 = 139; this.foo140 = 140; this.foo141 = 141; this.foo142 = 142; this.foo143 = 143; this.foo144 = 144; this.foo145 = 145; this.foo146 = 146; this.foo147 = 147; this.foo148 = 148; this.foo149 = 149; this.foo150 = 150; this.foo151 = 151; this.foo152 = 152; this.foo153 = 153; this.foo154 = 154; this.foo155 = 155; this.foo156 = 156; this.foo157 = 157; this.foo158 = 158; this.foo159 = 159; this.foo160 = 160; this.foo161 = 161; this.foo162 = 162; this.foo163 = 163; this.foo164 = 164; this.foo165 = 165; this.foo166 = 166; this.foo167 = 167; this.foo168 = 168; this.foo169 = 169; this.foo170 = 170; this.foo171 = 171; this.foo172 = 172; this.foo173 = 173; this.foo174 = 174; this.foo175 = 175; this.foo176 = 176; this.foo177 = 177; this.foo178 = 178; this.foo179 = 179; this.foo180 = 180; this.foo181 = 181; this.foo182 = 182; this.foo183 = 183; this.foo184 = 184; this.foo185 = 185; this.foo186 = 186; this.foo187 = 187; this.foo188 = 188; this.foo189 = 189; this.foo190 = 190; this.foo191 = 191; this.foo192 = 192; this.foo193 = 193; this.foo194 = 194; this.foo195 = 195; this.foo196 = 196; this.foo197 = 197; this.foo198 = 198; this.foo199 = 199; this.foo200 = 200; this.foo201 = 201; this.foo202 = 202; this.foo203 = 203; this.foo204 = 204; this.foo205 = 205; this.foo206 = 206; this.foo207 = 207; this.foo208 = 208; this.foo209 = 209; this.foo210 = 210; this.foo211 = 211; this.foo212 = 212; this.foo213 = 213; this.foo214 = 214; this.foo215 = 215; this.foo216 = 216; this.foo217 = 217; this.foo218 = 218; this.foo219 = 219; this.foo220 = 220; this.foo221 = 221; this.foo222 = 222; this.foo223 = 223; this.foo224 = 224; this.foo225 = 225; this.foo226 = 226; this.foo227 = 227; this.foo228 = 228; this.foo229 = 229; this.foo230 = 230; this.foo231 = 231; this.foo232 = 232; this.foo233 = 233; this.foo234 = 234; this.foo235 = 235; this.foo236 = 236; this.foo237 = 237; this.foo238 = 238; this.foo239 = 239; this.foo240 = 240; this.foo241 = 241; this.foo242 = 242; this.foo243 = 243; this.foo244 = 244; this.foo245 = 245; this.foo246 = 246; this.foo247 = 247; this.foo248 = 248; this.foo249 = 249; this.foo250 = 250; this.foo251 = 251; this.foo252 = 252; this.foo253 = 253; this.foo254 = 254; this.foo255 = 255; this.foo256 = 256; this.foo257 = 257; }