v8/test/mjsunit/regress/regress-542100.js
littledan ab3110e875 Add a lexical scope for the body of a with statement
For an edge case like the following in sloppy mode
  with ({}) function f() {}
a lexical scope needs to be created around the body in order
to hold the function declaration, so it can be hoisted according
to a loose interpretation of Annex B 3.3 (loose because ES2015
does not permit a function declaration as the body of a with
statement). This patch adds that scope.

BUG=chromium:542100
LOG=N
R=adamk

Review URL: https://codereview.chromium.org/1404803002

Cr-Commit-Position: refs/heads/master@{#31269}
2015-10-14 17:37:22 +00:00

26 lines
617 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
(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());