blob: 48c0cf27177c98e20e4b50fcc5488d2ee1635b6d [file] [log] [blame]
Steve Blocka7e24c12009-10-30 11:49:00 +00001// Copyright 2009 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
28// Test handling of const variables in various settings.
29
30(function () {
31 function f() {
32 function g() {
33 x = 42; // should be ignored
34 return x; // force x into context
35 }
36 x = 43; // should be ignored
37 assertEquals(undefined, g());
38 x = 44; // should be ignored
39 const x = 0;
40 x = 45; // should be ignored
41 assertEquals(0, g());
42 }
43 f();
44})();
45
46
47(function () {
48 function f() {
49 function g() {
50 with ({foo: 0}) {
51 x = 42; // should be ignored
52 return x; // force x into context
53 }
54 }
55 x = 43; // should be ignored
56 assertEquals(undefined, g());
57 x = 44; // should be ignored
58 const x = 0;
59 x = 45; // should be ignored
60 assertEquals(0, g());
61 }
62 f();
63})();
64
65
66(function () {
67 function f() {
68 function g(s) {
69 eval(s);
70 return x; // force x into context
71 }
72 x = 43; // should be ignored
73 assertEquals(undefined, g("x = 42;"));
74 x = 44; // should be ignored
75 const x = 0;
76 x = 45; // should be ignored
77 assertEquals(0, g("x = 46;"));
78 }
79 f();
80})();
81
82
83(function () {
84 function f() {
85 function g(s) {
86 with ({foo: 0}) {
87 eval(s);
88 return x; // force x into context
89 }
90 }
91 x = 43; // should be ignored
92 assertEquals(undefined, g("x = 42;"));
93 x = 44; // should be ignored
94 const x = 0;
95 x = 45; // should be ignored
96 assertEquals(0, g("x = 46;"));
97 }
98 f();
99})();
100
101
102(function () {
103 function f(s) {
104 function g() {
105 x = 42; // assign to global x, or to const x
106 return x;
107 }
108 x = 43; // declare global x
109 assertEquals(42, g());
110 x = 44; // assign to global x
111 eval(s);
112 x = 45; // should be ignored (assign to const x)
113 assertEquals(0, g());
114 }
115 f("const x = 0;");
116})();
117
118
119(function () {
120 function f(s) {
121 function g() {
122 with ({foo: 0}) {
123 x = 42; // assign to global x, or to const x
124 return x;
125 }
126 }
127 x = 43; // declare global x
128 assertEquals(42, g());
129 x = 44; // assign to global x
130 eval(s);
131 x = 45; // should be ignored (assign to const x)
132 assertEquals(0, g());
133 }
134 f("const x = 0;");
135})();
136
137
138(function () {
139 function f(s) {
140 function g(s) {
141 eval(s);
142 return x;
143 }
144 x = 43; // declare global x
145 assertEquals(42, g("x = 42;"));
146 x = 44; // assign to global x
147 eval(s);
148 x = 45; // should be ignored (assign to const x)
149 assertEquals(0, g("x = 46;"));
150 }
151 f("const x = 0;");
152})();
153
154
155(function () {
156 function f(s) {
157 function g(s) {
158 with ({foo: 0}) {
159 eval(s);
160 return x;
161 }
162 }
163 x = 43; // declare global x
164 assertEquals(42, g("x = 42;"));
165 x = 44; // assign to global x
166 eval(s);
167 x = 45; // should be ignored (assign to const x)
168 assertEquals(0, g("x = 46;"));
169 }
170 f("const x = 0;");
171})();
172