Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / v8 / test / mjsunit / const-declaration.js
1 // 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 })();