// 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.

// The test functions in this file will be eagerly compiled. The functions
// inside will be eagerly parsed but lazily compiled.

(function TestLengths() {
  function inner(p1, p2, p3) { }
  assertEquals(3, inner.length);
})();

(function TestAccessingContextVariables() {
  var in_context = 8;
  function inner() { return in_context; }
  assertEquals(8, inner());
})();

(function TestAccessingContextVariablesFromDeeper() {
  var in_context = 8;
  function inner() {
    function inner_inner() {
      function inner_inner_inner() {
        return in_context;
      }
      return inner_inner_inner;
    }
    return inner_inner;
  }
  assertEquals(8, inner()()());
})();
