blob: 0b22d9a3c3f1c76609104e2629263eef39aa2328 [file] [log] [blame]
// Copyright (c) 2013, 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.9
// dart2js used to have an infinite loop in its type propagation
// algorithm due to types becoming broader instead of narrower.
import "package:expect/expect.dart";
class A {
resolveSend(node) {
if (node == null) {
return [new B()][0];
} else {
return [new B(), new A()][1];
}
}
visitSend(node) {
var target = resolveSend(node);
if (false) {
if (false) {
target = target.getter;
if (false) {
target = new Object();
}
}
}
return true ? target : null;
}
}
var a = 43;
class B {
var getter = a == 42 ? new A() : null;
}
main() {
Expect.isTrue(new A().visitSend(new A()) is A);
Expect.isTrue(new A().visitSend(null) is B);
}