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