blob: e2ee343b62b9755d1d0f28c6193932f5323d3f1b [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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"This test checks that function declarations are treated as statements."
26);
27
28function f()
29{
30 return false;
31}
32
33function ifTest()
34{
35 if (true)
36 function f()
37 {
38 return true;
39 }
40
41 return f();
42}
43
44shouldBeTrue("ifTest()");
45
46function ifElseTest()
47{
48 if (false)
49 return false;
50 else
51 function f()
52 {
53 return true;
54 }
55
56 return f();
57}
58
59shouldBeTrue("ifElseTest()");
60
61function doWhileTest()
62{
63 var i = 0;
64 do
65 function f()
66 {
67 return true;
68 }
69 while (i++ < 10)
70
71 return f();
72}
73
74shouldBeTrue("doWhileTest()");
75
76function whileTest()
77{
78 var i = 0;
79 while (i++ < 10)
80 function f()
81 {
82 return true;
83 }
84
85 return f();
86}
87
88shouldBeTrue("whileTest()");
89
90function forTest()
91{
92 var i;
93 for (i = 0; i < 10; ++i)
94 function f()
95 {
96 return true;
97 }
98
99 return f();
100}
101
102shouldBeTrue("forTest()");
103
104function forVarTest()
105{
106 for (var i = 0; i < 10; ++i)
107 function f()
108 {
109 return true;
110 }
111
112 return f();
113}
114
115shouldBeTrue("forVarTest()");
116
117function forInTest()
118{
119 var a;
120 for (a in { field: false })
121 function f()
122 {
123 return true;
124 }
125
126 return f();
127}
128
129shouldBeTrue("forInTest()");
130
131function forInVarTest()
132{
133 var a;
134 for (var a in { field: false })
135 function f()
136 {
137 return true;
138 }
139
140 return f();
141}
142
143shouldBeTrue("forInVarTest()");
144
145function forInVarInitTest()
146{
147 var a;
148 for (var a = false in { field: false })
149 function f()
150 {
151 return true;
152 }
153
154 return f();
155}
156
157shouldBeTrue("forInVarInitTest()");
158
159function withTest()
160{
161 with ({ })
162 function f()
163 {
164 return true;
165 }
166
167 return f();
168}
169
170shouldBeTrue("withTest()");
171
172function labelTest()
173{
174 label:
175 function f()
176 {
177 return true;
178 }
179
180 return f();
181}
182
183shouldBeTrue("labelTest()");