f9db79ebdb
Function declarations were previously permitted by V8 in many locations which no ECMAScript specification allowed; the ECMAScript 2015 spec enumerates a few locations (in blocks, as well as after labels and in conditionals when in sloppy mode). This patch ships the flag to restrict the usage of function declarations to those contexts. R=adamk LOG=Y BUG=v8:4824 CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_chromium_rel_ng;tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1799233003 Cr-Commit-Position: refs/heads/master@{#34828}
27 lines
665 B
JavaScript
27 lines
665 B
JavaScript
// Copyright 2015 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.
|
|
|
|
// Flags: --harmony-sloppy --harmony-sloppy-function
|
|
// Flags: --no-harmony-restrictive-declarations
|
|
|
|
(function() {
|
|
var x = {a: 1}
|
|
assertEquals("undefined", typeof f);
|
|
with (x)
|
|
function f() { return a; }
|
|
assertEquals("function", typeof f);
|
|
assertEquals(1, f());
|
|
x.a = 2;
|
|
assertEquals(2, f());
|
|
})();
|
|
|
|
var y = {b: 1}
|
|
assertEquals("undefined", typeof g);
|
|
with (y)
|
|
function g() { return b; }
|
|
assertEquals("function", typeof g);
|
|
assertEquals(1, g());
|
|
y.b = 2;
|
|
assertEquals(2, g());
|