blob: 2b25f4356173f71703680f4fc1dcaa8b5493140e [file] [log] [blame]
// 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.
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());
}
}