Home | History | Annotate | Download | only in regress
      1 // Copyright 2013 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 // In the assertions but the first, the ES5 spec actually requires 0, but
     29 // that is arguably a spec bug, and other browsers return 1 like us.
     30 // In ES6, all of those will presumably result in a ReferenceError.
     31 // Our main concern with this test is that we do not crash, though.
     32 
     33 function f1() {
     34   var XXX = 0
     35   try { throw 1 } catch (XXX) {
     36     eval("var h = function() { return XXX }")
     37   }
     38   return h()
     39 }
     40 assertEquals(1, f1())
     41 
     42 function f2() {
     43   var XXX = 0
     44   try { throw 1 } catch (XXX) {
     45     eval("function h(){ return XXX }")
     46   }
     47   return h()
     48 }
     49 assertEquals(1, f2())
     50 
     51 function f3() {
     52   var XXX = 0
     53   try { throw 1 } catch (XXX) {
     54     try { throw 2 } catch (y) {
     55       eval("function h(){ return XXX }")
     56     }
     57   }
     58   return h()
     59 }
     60 assertEquals(1, f3())
     61 
     62 function f4() {
     63   var XXX = 0
     64   try { throw 1 } catch (XXX) {
     65     with ({}) {
     66       eval("function h(){ return XXX }")
     67     }
     68   }
     69   return h()
     70 }
     71 assertEquals(1, f4())
     72 
     73 function f5() {
     74   var XXX = 0
     75   try { throw 1 } catch (XXX) {
     76     eval('eval("function h(){ return XXX }")')
     77   }
     78   return h()
     79 }
     80 assertEquals(1, f5())
     81 
     82 function f6() {
     83   var XXX = 0
     84   try { throw 1 } catch (XXX) {
     85     eval("var h = (function() { function g(){ return XXX } return g })()")
     86   }
     87   return h()
     88 }
     89 assertEquals(1, f6())
     90 
     91 function f7() {
     92   var XXX = 0
     93   try { throw 1 } catch (XXX) {
     94     eval("function h() { var XXX=2; function g(){ return XXX } return g }")
     95   }
     96   return h()()
     97 }
     98 assertEquals(2, f7())  // !
     99 
    100 var XXX = 0
    101 try { throw 1 } catch (XXX) {
    102   eval("function h(){ return XXX }")
    103 }
    104 assertEquals(1, h())
    105