1// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5// Flags: --harmony-destructuring-bind
6// Flags: --strong-mode --allow-natives-syntax
7
8(function() {
9  var f = (function() {
10    "use strong";
11    return function f({ x = function() { return []; } }) { return x(); };
12  })();
13  var a = f({ x: undefined });
14  assertTrue(%IsStrong(a));
15
16  // TODO(rossberg): Loading non-existent properties during destructuring should
17  // not throw in strong mode.
18  assertThrows(function() { f({}); }, TypeError);
19
20  function weakf({ x = function() { return []; } }) { return x(); }
21  a = weakf({});
22  assertFalse(%IsStrong(a));
23
24  function outerf() { return []; }
25  var f2 = (function() {
26    "use strong";
27    return function f2({ x = outerf }) { return x(); };
28  })();
29  a = f2({ x: undefined });
30  assertFalse(%IsStrong(a));
31})();
32