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