Home | History | Annotate | Download | only in compiler
      1 // Copyright 2009 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 // Tests for simple assignments and literals inside an anonymous function
     29 
     30 // Test simple return statement.
     31 assertEquals(8, eval("(function() { return 8; })()"));
     32 
     33 // Test simple assignment
     34 var code = "(function() {\
     35                var a;\
     36                a = 8;\
     37                return a;\
     38              })()";
     39 assertEquals(8, eval(code));
     40 
     41 code = "(function() {\
     42            var x;\
     43            x = 'abc';\
     44            return x;\
     45          })()";
     46 assertEquals("abc", eval(code));
     47 
     48 // Test assignment as an RHS expression
     49 
     50 code = "(function() {\
     51            var x, y;\
     52            x = y = 8;\
     53            return x;\
     54          })()";
     55 assertEquals(8, eval(code));
     56 
     57 
     58 code = "(function() {\
     59            var x, y;\
     60            x = y = 8;\
     61            return y;\
     62          })()";
     63 assertEquals(8, eval(code));
     64 
     65 
     66 code = "(function() {\
     67            var x,y,z;\
     68            return x = y = z = 8;\
     69          })()";
     70 assertEquals(8, eval(code));
     71 
     72 // Test object literals.
     73 var a, b;
     74 code = "a = {x:8}";
     75 eval(code);
     76 assertEquals(8, a.x);
     77 
     78 code = "b = {x:a, y:'abc'}";
     79 eval(code);
     80 assertEquals(a, b.x);
     81 assertEquals(8, b.x.x);
     82 assertEquals("abc", b.y);
     83 
     84 code = "({x:8, y:9}); 10";
     85 assertEquals(10, eval(code));
     86 
     87 code = "({x:8, y:9})";
     88 eval(code);
     89 assertEquals(9, eval(code+".y"));
     90 
     91 code = "a = {2:8, x:9}";
     92 eval(code);
     93 assertEquals(8, a[2]);
     94 assertEquals(8, a["2"]);
     95 assertEquals(9, a["x"]);
     96 
     97 // Test regexp literals.
     98 
     99 a = /abc/;
    100 
    101 assertEquals(/abc/, a);
    102 
    103 code = "/abc/; 8";
    104 assertEquals(8, eval(code));
    105