| // Copyright 2017 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Assignment to const variable inside with-statement should fail. |
| const x = 0; |
| assertThrows(() => { with ({}) { x = 1; } }, TypeError); |
| assertEquals(0, x); |
| |
| assertThrows(() => { with ({}) { eval("x = 1"); } }, TypeError); |
| assertEquals(0, x); |
| |
| // Assignment to name of named function expression inside with-statement |
| // should not throw (but also not succeed). |
| assertEquals('function', function f() { |
| with ({}) { f = 1 } |
| return typeof f; |
| }()); |
| |
| // But we should throw an exception if the assignment is itself in strict |
| // code. |
| assertEquals('function', function f() { |
| with ({}) { |
| assertThrows(function() { "use strict"; f = 1 }, TypeError); |
| } |
| return typeof f; |
| }()); |