13ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Copyright 2009 the V8 project authors. All rights reserved. 23ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Redistribution and use in source and binary forms, with or without 33ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// modification, are permitted provided that the following conditions are 43ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// met: 53ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// 63ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// * Redistributions of source code must retain the above copyright 73ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// notice, this list of conditions and the following disclaimer. 83ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// * Redistributions in binary form must reproduce the above 93ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// copyright notice, this list of conditions and the following 103ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// disclaimer in the documentation and/or other materials provided 113ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// with the distribution. 123ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// * Neither the name of Google Inc. nor the names of its 133ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// contributors may be used to endorse or promote products derived 143ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// from this software without specific prior written permission. 153ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// 163ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 283ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Tests for simple assignments and literals inside an anonymous function 293ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 303ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Test simple return statement. 313ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals(8, eval("(function() { return 8; })()")); 323ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 333ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Test simple assignment 343ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvar code = "(function() {\ 353ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block var a;\ 363ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block a = 8;\ 373ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block return a;\ 383ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block })()"; 393ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals(8, eval(code)); 403ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 413ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockcode = "(function() {\ 423ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block var x;\ 433ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block x = 'abc';\ 443ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block return x;\ 453ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block })()"; 463ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals("abc", eval(code)); 473ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 483ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block// Test assignment as an RHS expression 493ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 503ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockcode = "(function() {\ 513ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block var x, y;\ 523ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block x = y = 8;\ 533ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block return x;\ 543ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block })()"; 553ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals(8, eval(code)); 563ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 573ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 583ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockcode = "(function() {\ 593ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block var x, y;\ 603ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block x = y = 8;\ 613ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block return y;\ 623ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block })()"; 633ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals(8, eval(code)); 643ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 653ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 663ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockcode = "(function() {\ 673ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block var x,y,z;\ 683ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block return x = y = z = 8;\ 693ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block })()"; 703ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve BlockassertEquals(8, eval(code)); 713ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 72d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block// Test object literals. 73d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockvar a, b; 74d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "a = {x:8}"; 75d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockeval(code); 76d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(8, a.x); 77d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 78d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "b = {x:a, y:'abc'}"; 79d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockeval(code); 80d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(a, b.x); 81d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(8, b.x.x); 82d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals("abc", b.y); 83d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 84d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "({x:8, y:9}); 10"; 85d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(10, eval(code)); 86d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 87d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "({x:8, y:9})"; 88d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockeval(code); 89d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(9, eval(code+".y")); 90d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 91d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "a = {2:8, x:9}"; 92d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockeval(code); 93d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(8, a[2]); 94d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(8, a["2"]); 95d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(9, a["x"]); 96d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 97d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block// Test regexp literals. 98d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 99d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blocka = /abc/; 100d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 101d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(/abc/, a); 102d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block 103d0582a6c46733687d045e4188a1bcd0123c758a1Steve Blockcode = "/abc/; 8"; 104d0582a6c46733687d045e4188a1bcd0123c758a1Steve BlockassertEquals(8, eval(code)); 105