// 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: --min-preparse-length=0
// Flags: --harmony-sloppy --harmony-sloppy-let

let xxx = 1;
let f = undefined;
{
  let inner_x = xxx;
  f = function() { return inner_x; };
}

assertSame(1, f());

xxx = 42;
{
  f = function() { return inner_x1; };
  let inner_x1 = xxx;
}

assertSame(42, f());

xxx = 31;
{
  let inner_x1 = xxx;
  try {
    throw new Error();
  } catch (e) {
    f = function() { return inner_x1; };
  }
}
assertSame(31, f());
