blob: 539fbd0e4234961370711712a2404ab810810708 [file] [log] [blame]
Steve Block1e0659c2011-05-24 12:43:12 +01001// 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
Ben Murdochb8a8cc12014-11-26 15:28:44 +000028// Flags: --allow-natives-syntax
Steve Block1e0659c2011-05-24 12:43:12 +010029
Ben Murdoch3ef787d2012-04-12 10:51:47 +010030function burn() {
31 var a = new Array(3);
32 a[0] = 10;
33 a[1] = 15.5;
34 a[2] = 20;
35 return a;
36}
Steve Block1e0659c2011-05-24 12:43:12 +010037
Ben Murdoch3ef787d2012-04-12 10:51:47 +010038function check(a) {
39 assertEquals(10, a[0]);
40 assertEquals(15.5, a[1]);
41 assertEquals(20, a[2]);
42}
43
44var b;
45for (var i = 0; i < 3; ++i) {
46 b = burn();
47 check(b); // all OK
48}
49%OptimizeFunctionOnNextCall(burn);
50b = burn();
51check(b); // fails
Steve Block1e0659c2011-05-24 12:43:12 +010052
Ben Murdoch85b71792012-04-11 18:30:58 +010053
Ben Murdoch3ef787d2012-04-12 10:51:47 +010054function loop_test(x) {
55 for (i=0;i<3;i++) {
56 x[i] = (i+1) * 0.5;
57 }
58}
Ben Murdoch85b71792012-04-11 18:30:58 +010059
Ben Murdoch3ef787d2012-04-12 10:51:47 +010060function check2(b) {
61 assertEquals(0.5, b[0]);
62 assertEquals(1.0, b[1]);
63 assertEquals(1.5, b[2]);
64}
Ben Murdoch85b71792012-04-11 18:30:58 +010065
Ben Murdoch3ef787d2012-04-12 10:51:47 +010066for (var i = 0; i < 3; ++i) {
67 b = [0,1,2];
68 loop_test(b);
69 check2(b);
70}
71%OptimizeFunctionOnNextCall(loop_test);
72b = [0,1,2];
73loop_test(b);
74check2(b);