blob: 2898c8f6a6731254b5bb7b0262be65e16e8e8c0d [file] [log] [blame]
// 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;
}());