v8/test/mjsunit/lazy-inner-functions.js
marja 1b5ccb055a PreParser: track variable declarations and parameters
This makes the context allocation less pessimistic in the following cases:

function outer() {
  var a; // Won't be context allocated
  function inner1() { var a; a; }
  function inner2(a) { a; }
  function inner3([a]) { a; }
  function inner4({ a: b}) { a; }
}

BUG=v8:5501

Review-Url: https://codereview.chromium.org/2407163003
Cr-Commit-Position: refs/heads/master@{#41521}
2016-12-06 13:24:07 +00:00

30 lines
812 B
JavaScript

// Copyright 2016 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: --lazy-inner-functions
(function TestLazyInnerFunctionCallsEval() {
var i = (function eager_outer() {
var outer_var = 41; // Should be context-allocated
function lazy_inner() {
return eval("outer_var");
}
return lazy_inner;
})();
assertEquals(41, i());
})();
(function TestLazyInnerFunctionDestructuring() {
var i = (function eager_outer() {
var outer_var = 41; // Should be context-allocated
function lazy_inner() {
// This introduces b and refers to outer_var.
var {outer_var : b} = {outer_var};
return b;
}
return lazy_inner;
})();
assertEquals(41, i());
})();