| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Var-let conflict in a function throws, even if the var is in an eval | 5 // Var-let conflict in a function throws, even if the var is in an eval |
| 6 | 6 |
| 7 // Throws at the top level of a function | 7 // Throws at the top level of a function |
| 8 assertThrows(function() { | 8 assertThrows(function() { |
| 9 let x = 1; | 9 let x = 1; |
| 10 eval('var x'); | 10 eval('var x'); |
| 11 }, TypeError); | 11 }, SyntaxError); |
| 12 | 12 |
| 13 // If the eval is in its own block scope, throws | 13 // If the eval is in its own block scope, throws |
| 14 assertThrows(function() { | 14 assertThrows(function() { |
| 15 let y = 1; | 15 let y = 1; |
| 16 { eval('var y'); } | 16 { eval('var y'); } |
| 17 }, TypeError); | 17 }, SyntaxError); |
| 18 | 18 |
| 19 // If the let is in its own block scope, with the eval, throws | 19 // If the let is in its own block scope, with the eval, throws |
| 20 assertThrows(function() { | 20 assertThrows(function() { |
| 21 { | 21 { |
| 22 let x = 1; | 22 let x = 1; |
| 23 eval('var x'); | 23 eval('var x'); |
| 24 } | 24 } |
| 25 }, TypeError); | 25 }, SyntaxError); |
| 26 | 26 |
| 27 // Legal if the let is no longer visible | 27 // Legal if the let is no longer visible |
| 28 assertDoesNotThrow(function() { | 28 assertDoesNotThrow(function() { |
| 29 { | 29 { |
| 30 let x = 1; | 30 let x = 1; |
| 31 } | 31 } |
| 32 eval('var x'); | 32 eval('var x'); |
| 33 }); | 33 }); |
| 34 | 34 |
| 35 // All the same works for const: | 35 // All the same works for const: |
| 36 // Throws at the top level of a function | 36 // Throws at the top level of a function |
| 37 assertThrows(function() { | 37 assertThrows(function() { |
| 38 const x = 1; | 38 const x = 1; |
| 39 eval('var x'); | 39 eval('var x'); |
| 40 }, TypeError); | 40 }, SyntaxError); |
| 41 | 41 |
| 42 // If the eval is in its own block scope, throws | 42 // If the eval is in its own block scope, throws |
| 43 assertThrows(function() { | 43 assertThrows(function() { |
| 44 const y = 1; | 44 const y = 1; |
| 45 { eval('var y'); } | 45 { eval('var y'); } |
| 46 }, TypeError); | 46 }, SyntaxError); |
| 47 | 47 |
| 48 // If the const is in its own block scope, with the eval, throws | 48 // If the const is in its own block scope, with the eval, throws |
| 49 assertThrows(function() { | 49 assertThrows(function() { |
| 50 { | 50 { |
| 51 const x = 1; | 51 const x = 1; |
| 52 eval('var x'); | 52 eval('var x'); |
| 53 } | 53 } |
| 54 }, TypeError); | 54 }, SyntaxError); |
| 55 | 55 |
| 56 // Legal if the const is no longer visible | 56 // Legal if the const is no longer visible |
| 57 assertDoesNotThrow(function() { | 57 assertDoesNotThrow(function() { |
| 58 { | 58 { |
| 59 const x = 1; | 59 const x = 1; |
| 60 } | 60 } |
| 61 eval('var x'); | 61 eval('var x'); |
| 62 }); | 62 }); |
| 63 | 63 |
| 64 // In global scope | 64 // In global scope |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 { | 132 { |
| 133 let x = 1; | 133 let x = 1; |
| 134 eval('{ function x() {} }'); | 134 eval('{ function x() {} }'); |
| 135 } | 135 } |
| 136 })(); | 136 })(); |
| 137 } catch (e) { | 137 } catch (e) { |
| 138 caught = true; | 138 caught = true; |
| 139 } | 139 } |
| 140 // TODO(littledan): switch to assertTrue when bug is fixed | 140 // TODO(littledan): switch to assertTrue when bug is fixed |
| 141 assertTrue(caught); | 141 assertTrue(caught); |
| OLD | NEW |