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