blob: 2056a9d8da9585a9639942156f3515653076368d [file] [log] [blame]
Steve Blocka7e24c12009-10-30 11:49:00 +00001// Copyright 2008 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 Murdoch4a90d5f2016-03-22 12:00:34 +000028// Flags: --legacy-const
29
Steve Blocka7e24c12009-10-30 11:49:00 +000030// Regression test cases for issue 1178598.
31
32// Make sure const-initialization doesn't conflict
33// with heap-allocated locals for catch variables.
34var value = (function(){
35 try { } catch(e) {
36 // Force the 'e' variable to be heap-allocated
37 // by capturing it in a function closure.
38 (function() { e; });
39 }
40 // Make sure the two definitions of 'e' do
41 // not conflict in any way.
42 eval("const e=1");
43 return e;
44})();
45
46assertEquals(1, value);
47
48
49
50// Make sure that catch variables can be accessed using eval.
51var value = (function() {
52 var result;
53 try {
54 throw 42;
55 } catch (e) {
56 result = eval("e");
57 }
58 return result;
59})();
60
61assertEquals(42, value);
62
63
64
65// Make sure that heap-allocated locals for catch variables aren't
66// visible outside the catch scope and that they are visible from
67// within.
68var value = (function() {
69 var result;
70 try {
71 throw 87;
72 } catch(e) {
73 // Force the 'e' variable to be heap-allocated
74 // by capturing it in a function closure.
75 (function() { e; });
76 result = eval("e");
77 }
78
79 // Expect accessing 'e' to yield an exception because
80 // it is not defined in the current scope.
81 try {
82 eval("e");
83 assertTrue(false); // should throw exception
84 } catch(exception) {
85 assertTrue(exception instanceof ReferenceError);
86 return result;
87 }
88})();
89
90assertEquals(87, value);