19d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Copyright 2009 the V8 project authors. All rights reserved. 29d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Redistribution and use in source and binary forms, with or without 39d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// modification, are permitted provided that the following conditions are 49d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// met: 59d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// 69d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// * Redistributions of source code must retain the above copyright 79d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// notice, this list of conditions and the following disclaimer. 89d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// * Redistributions in binary form must reproduce the above 99d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// copyright notice, this list of conditions and the following 109d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// disclaimer in the documentation and/or other materials provided 119d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// with the distribution. 129d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// * Neither the name of Google Inc. nor the names of its 139d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// contributors may be used to endorse or promote products derived 149d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// from this software without specific prior written permission. 159d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// 169d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Tests for simple assignments and literals inside an anonymous function 299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Test simple return statement. 319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval("(function() { return 8; })()")); 329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Test simple assignment 349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comvar code = "(function() {\ 359d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var a;\ 369d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com a = 8;\ 379d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return a;\ 389d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com })()"; 399d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval(code)); 409d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 419d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comcode = "(function() {\ 429d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var x;\ 439d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com x = 'abc';\ 449d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return x;\ 459d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com })()"; 469d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals("abc", eval(code)); 479d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 489d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// Test assignment as an RHS expression 499d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 509d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comcode = "(function() {\ 519d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var x, y;\ 529d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com x = y = 8;\ 539d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return x;\ 549d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com })()"; 559d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval(code)); 569d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 579d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 589d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comcode = "(function() {\ 599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var x, y;\ 609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com x = y = 8;\ 619d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return y;\ 629d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com })()"; 639d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval(code)); 649d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 659d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 669d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comcode = "(function() {\ 679d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var x,y,z;\ 689d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return x = y = z = 8;\ 699d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com })()"; 709d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval(code)); 719d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 723811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org// Test object literals. 733811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvar a, b; 743811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "a = {x:8}"; 753811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgeval(code); 763811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(8, a.x); 773811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 783811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "b = {x:a, y:'abc'}"; 793811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgeval(code); 803811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(a, b.x); 813811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(8, b.x.x); 823811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals("abc", b.y); 833811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 843811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "({x:8, y:9}); 10"; 853811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(10, eval(code)); 863811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 873811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "({x:8, y:9})"; 883811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgeval(code); 893811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(9, eval(code+".y")); 903811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 913811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "a = {2:8, x:9}"; 923811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgeval(code); 933811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(8, a[2]); 943811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(8, a["2"]); 953811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(9, a["x"]); 963811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 973811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org// Test regexp literals. 983811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 993811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orga = /abc/; 1003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 1013811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(/abc/, a); 1023811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 1033811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgcode = "/abc/; 8"; 1043811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(8, eval(code)); 105