dart-sdk/tests/dart2js_2/if_null_test.dart
Joshua Litt 05ca544f15 [dart2js] Move tests/compiler/dart2js_extra to tests/dart2js_2.
Change-Id: Iaa0ca2b4f2d1b15f79ddca37834d3ed2497bc068
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149242
Commit-Queue: Joshua Litt <joshualitt@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2020-06-03 15:15:30 +00:00

59 lines
1.1 KiB
Dart

// 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.
// @dart = 2.7
import "package:expect/expect.dart";
@pragma('dart2js:noInline')
@pragma('dart2js:assumeDynamic')
confuse(x) => x;
main(args) {
dynamic 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).
dynamic 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());
}
}