// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// SharedOptions=--enable-null-aware-operators
import "package:expect/expect.dart";

@NoInline() @AssumeDynamic()
confuse(x) => x;

main(args) {
  var x = new A();
  var y;

  // Checks that inference doesn't incorrectly treat this as a normal
  // assignment (where only B is a possible value after the assignment).
  var c = x ??= new B();
  var z = x;
  Expect.equals('a', x.m());
  Expect.equals('a', z.m());
  Expect.equals('a', c.m());
  if (confuse(true)) y = x;
  Expect.equals('a', y.m());

  // Similar test, within fields.
  new C();
  new D();
}

class A { m() => 'a'; }
class B { m() => 'b'; }

class C {
  var y;
  C() {
    y = new A();
    var c = y ??= new B();
    Expect.equals('a', y.m());
    Expect.equals('a', c.m());
  }
}

class D {
  var y;
  D() {
    this.y = new A();
    var c = this.y ??= new B();
    Expect.equals('a', y.m());
    Expect.equals('a', c.m());
  }
}
