Files
sdk/tests/web_2/regress/if_method_call_test.dart
T
Johnni Winther bfee879e19 [dart2js] Add tests for bug in dart2js type promotion
Dart2js type promotion wrongfully uses the type promotion result of
the last argument of an invocation as the result of the invocation
itself.

Change-Id: I188514fdac4edbea24dffbd858c0f8be6cd6ccf0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185781
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2021-02-22 08:56:18 +00:00

58 lines
1.1 KiB
Dart

// Copyright (c) 2021, 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.
// Regression test for bug in dart2js type promotion.
import 'package:expect/expect.dart';
staticMethod(a) => true;
class Super {
superMethod(a) => true;
}
class Class extends Super {
instanceMethod(a) => true;
test1(c) {
if (super.superMethod(c is Class2)) {
return c.method();
}
return 0;
}
test2(c) {
if (this.instanceMethod(c is Class2)) {
return c.method();
}
return 0;
}
}
class Class1 {
method() => 87;
}
class Class2 {
method() => 42;
}
test(c) {
if (staticMethod(c is Class2)) {
return c.method();
}
return 0;
}
main() {
Expect.equals(87, test(new Class1())); //# 01: ok
Expect.equals(42, test(new Class2()));
Expect.equals(87, new Class().test1(new Class1())); //# 02: ok
Expect.equals(42, new Class().test1(new Class2()));
Expect.equals(87, new Class().test2(new Class1())); //# 03: ok
Expect.equals(42, new Class().test2(new Class2()));
}