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// Test simple literals. 299d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval("8")); 309d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 319d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(null, eval("null")); 329d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 339d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals("abc", eval("'abc'")); 349d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 359d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(8, eval("6;'abc';8")); 363811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3721b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// Characters just outside the ranges of hex-escapes. 3821b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// "/" comes just before "0". 39ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1/"'); 40ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111/"'); 4121b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1/", RegExp("\\x1/").source); 4221b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111/", RegExp("\\u111/").source); 4321b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 4421b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// ":" comes just after "9". 45ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1:"'); 46ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111:"'); 4721b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1:", /\x1:/.source); 4821b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111:", /\u111:/.source); 4921b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 5021b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// "`" comes just before "a". 51ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1`"'); 52ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111`"'); 5321b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1`", /\x1`/.source); 5421b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111`", /\u111`/.source); 5521b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 5621b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// "g" comes just before "f". 57ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1g"'); 58ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111g"'); 5921b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1g", /\x1g/.source); 6021b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111g", /\u111g/.source); 6121b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 6221b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// "@" comes just before "A". 63ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1@"'); 64ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111@"'); 6521b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1@", /\x1@/.source); 6621b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111@", /\u111@/.source); 6721b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 6821b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org// "G" comes just after "F". 69ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\x1G"'); 70ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comassertThrows('"\\u111G"'); 7121b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\x1G", /\x1G/.source); 7221b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.orgassertEquals("\\u111G", /\u111G/.source); 7321b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 743811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org// Test some materialized array literals. 753811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([1,2,3,4], eval('[1,2,3,4]')); 763811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([[1,2],3,4], eval('[[1,2],3,4]')); 773811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([1,[2,3,4]], eval('[1,[2,3,4]]')); 783811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 793811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([1,2,3,4], eval('var a=1, b=2; [a,b,3,4]')) 803811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([1,2,3,4], eval('var a=1, b=2, c = [a,b,3,4]; c')); 813811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 823811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgfunction double(x) { return x + x; } 833811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvar s = 'var a = 1, b = 2; [double(a), double(b), double(3), double(4)]'; 843811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals([2,4,6,8], eval(s)); 853811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 863811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org// Test array literals in effect context. 873811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(17, eval('[1,2,3,4]; 17')); 883811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(19, eval('var a=1, b=2; [a,b,3,4]; 19')); 893811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgassertEquals(23, eval('var a=1, b=2; c=23; [a,b,3,4]; c')); 9021b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org 9131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org// Test that literals work for non-smi indices. 9231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org// Ensure hash-map collision if using value as hash. 9331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgvar o = {"2345678901" : 42, "2345678901" : 30}; 94