// 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; }());