1// Copyright 2013 the V8 project authors. All rights reserved.
2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions
6// are met:
7// 1.  Redistributions of source code must retain the above copyright
8//     notice, this list of conditions and the following disclaimer.
9// 2.  Redistributions in binary form must reproduce the above copyright
10//     notice, this list of conditions and the following disclaimer in the
11//     documentation and/or other materials provided with the distribution.
12//
13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24description(
25"Tests that GetLocals on captured variables aren't eliminated too aggressively."
26);
27
28function foo() {
29    var x;
30    (function(){
31        x = 42;
32        x = 42;
33        x = 42;
34        x = 42;
35        x = 42;
36        x = 42;
37        x = 42;
38        x = 42;
39        x = 42;
40        x = 42;
41        x = 42;
42        x = 42;
43        x = 42;
44        x = 42;
45        x = 42;
46        x = 42;
47        x = 42;
48        x = 42;
49        x = 42;
50        x = 42;
51        x = 42;
52        x = 42;
53        x = 42;
54        x = 42;
55        x = 42;
56        x = 42;
57        x = 42;
58        x = 42;
59        x = 42;
60        x = 42;
61        x = 42;
62        x = 42;
63        x = 42;
64        x = 42;
65        x = 42;
66        x = 42;
67        x = 42;
68        x = 42;
69        x = 42;
70        x = 42;
71        x = 42;
72        x = 42;
73        x = 42;
74        x = 42;
75        x = 42;
76        x = 42;
77        x = 42;
78        x = 42;
79        x = 42;
80        x = 42;
81        x = 42;
82        x = 42;
83        x = 42;
84        x = 42;
85        x = 42;
86        x = 42;
87        x = 42;
88        x = 42;
89        x = 42;
90        x = 42;
91        x = 42;
92        x = 42;
93        x = 42;
94        x = 42;
95    })();
96    var y = x;
97    return y;
98}
99
100for (var i = 0; i < 100; ++i)
101    shouldBe("foo()", "42");
102