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// Tests loading of properties across eval calls. 29 30var x = 1; 31 32// Test loading across an eval call that does not shadow variables. 33function testNoShadowing() { 34 var y = 2; 35 function f() { 36 eval('1'); 37 assertEquals(1, x); 38 assertEquals(2, y); 39 function g() { 40 assertEquals(1, x); 41 assertEquals(2, y); 42 } 43 g(); 44 } 45 f(); 46} 47 48testNoShadowing(); 49 50// Test loading across eval calls that do not shadow variables. 51function testNoShadowing2() { 52 var y = 2; 53 eval('1'); 54 function f() { 55 eval('1'); 56 assertEquals(1, x); 57 assertEquals(2, y); 58 function g() { 59 assertEquals(1, x); 60 assertEquals(2, y); 61 } 62 g(); 63 } 64 f(); 65} 66 67testNoShadowing2(); 68 69// Test loading across an eval call that shadows variables. 70function testShadowing() { 71 var y = 2; 72 function f() { 73 eval('var x = 3; var y = 4;'); 74 assertEquals(3, x); 75 assertEquals(4, y); 76 function g() { 77 assertEquals(3, x); 78 assertEquals(4, y); 79 } 80 g(); 81 } 82 f(); 83} 84 85testShadowing(); 86