// Copyright 2019 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: --harmony-optional-chaining

const o = { m() { return this; }, p: 42 };
const p = { o: o };

function id(x) { return x; }

assertEquals(o?.m().p, 42);
assertEquals((o?.m)().p, 42);
assertEquals(o?.m(), (o?.m)());
assertEquals(p?.o?.m().p, 42);
assertEquals((p?.o?.m)().p, 42);
assertEquals(p?.o?.m(), (p?.o?.m)());

assertEquals(o?.[id('m')]().p, 42);
assertEquals((o?.[id('m')])().p, 42);
assertEquals(o?.[id('m')](), (o?.[id('m')])());
assertEquals(p?.[id('o')]?.[id('m')]().p, 42);
assertEquals((p?.[id('o')]?.[id('m')])().p, 42);
assertEquals(p?.[id('o')]?.[id('m')](), (p?.[id('o')]?.[id('m')])());
