1b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Copyright 2010 the V8 project authors. All rights reserved. 281362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// Redistribution and use in source and binary forms, with or without 381362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// modification, are permitted provided that the following conditions are 481362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// met: 581362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// 681362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// * Redistributions of source code must retain the above copyright 781362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// notice, this list of conditions and the following disclaimer. 881362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// * Redistributions in binary form must reproduce the above 981362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// copyright notice, this list of conditions and the following 1081362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// disclaimer in the documentation and/or other materials provided 1181362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// with the distribution. 1281362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// * Neither the name of Google Inc. nor the names of its 1381362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// contributors may be used to endorse or promote products derived 1481362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// from this software without specific prior written permission. 1581362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// 1681362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1781362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1881362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1981362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2081362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2181362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2281362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2381362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2481362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2581362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2681362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2781362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen 28b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Simple tests of the various kinds of variable references in the 29b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// implementstion. 3081362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen 31b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Global variables. 32b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochvar x = 0; 33b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f0() { return x; } 34b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(0, f0()); 3581362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen 3681362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen 37b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Parameters. 38b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f1(x) { return x; } 39b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(1, f1(1)); 40b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 41b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 42b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Stack-allocated locals. 43b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f2() { var x = 2; return x; } 44b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(2, f2()); 45b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 46b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 47b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Context-allocated locals. Local function forces x into f3's context. 48b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f3(x) { 49b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch function g() { return x; } 50b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return x; 51b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 52b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(3, f3(3)); 53b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 54b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Local function reads x from an outer context. 55b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f4(x) { 56b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch function g() { return x; } 57b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return g(); 5881362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen} 59b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(4, f4(4)); 60b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 61b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 62b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Lookup slots. 'With' forces x to be looked up at runtime. 63b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f5(x) { 64b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch with ({}) return x; 65b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 66b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(5, f5(5)); 67b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 6881362e16c30e9e970af6b17592f627ad8cdee4d8Kristian Monsen 69b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// Parameters rewritten to property accesses. Using the name 'arguments' 70b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// (even if it shadows the arguments object) forces all parameters to be 71b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch// rewritten to explicit property accesses. 72b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction f6(arguments) { return arguments; } 73b0fe1620dcb4135ac3ab2d66ff93072373911299Ben MurdochassertEquals(6, f6(6)); 74