// Copyright 2018 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: --allow-natives-syntax --no-lazy

// For regression testing, it's important that these functions are:
// 1) toplevel
// 2) arrow functions with single-expression bodies
// 3) eagerly compiled

let f = ({a = (({b = {a = c} = {
  a: 0x1234
}}) => 1)({})}, c) => 1;

assertThrows(() => f({}), ReferenceError);

let g = ({a = (async ({b = {a = c} = {
  a: 0x1234
}}) => 1)({})}, c) => a;

testAsync(assert => {
  assert.plan(1);
  g({}).catch(e => {
    assert.equals("ReferenceError", e.name);
  });
});
