| // Copyright (c) 2019, 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. |
| |
| // dart2jsOptions=--omit-implicit-checks |
| |
| import 'package:expect/expect.dart'; |
| |
| main() { |
| test1(); |
| test2(); |
| test3(); |
| test4(); |
| test5(); |
| test6(); |
| test7(); |
| } |
| |
| class A1<T> {} |
| |
| class B1 extends A1<int> {} |
| |
| @pragma('dart2js:noInline') |
| test1() { |
| Expect.isTrue(_test1(method1a)); |
| Expect.isTrue(_test1(method1b)); |
| Expect.isFalse(_test1(method1c)); |
| } |
| |
| B1 method1a() => throw 'unreachable'; |
| A1<int> method1b() => throw 'unreachable'; |
| A1<String> method1c() => throw 'unreachable'; |
| |
| @pragma('dart2js:noInline') |
| bool _test1(f) => f is A1<int> Function(); |
| |
| class A2<T> {} |
| |
| class B2 extends A2<int> {} |
| |
| @pragma('dart2js:noInline') |
| test2() { |
| Expect.isFalse(_test2(method2a)); |
| Expect.isTrue(_test2(method2b)); |
| Expect.isFalse(_test2(method2c)); |
| } |
| |
| void method2a(B2 b) {} |
| void method2b(A2<int> a) {} |
| void method2c(A2<String> a) {} |
| |
| @pragma('dart2js:noInline') |
| bool _test2(f) => f is void Function(A2<int>); |
| |
| class A3<T> {} |
| |
| class B3 extends A3<int> {} |
| |
| @pragma('dart3js:noInline') |
| test3() { |
| Expect.isTrue(_test3(method3a)); |
| Expect.isTrue(_test3(method3b)); |
| Expect.isFalse(_test3(method3c)); |
| } |
| |
| void method3a(B3 b) {} |
| void method3b(A3<int> a) {} |
| void method3c(A3<String> a) {} |
| |
| @pragma('dart3js:noInline') |
| _test3(f) => f is void Function(B3); |
| |
| class A4<T> {} |
| |
| class B4 extends A4<int> {} |
| |
| @pragma('dart4js:noInline') |
| test4() { |
| Expect.isTrue(_test4(method4a)); |
| Expect.isFalse(_test4(method4b)); |
| Expect.isFalse(_test4(method4c)); |
| } |
| |
| B4 method4a() => throw 'unreachable'; |
| A4<int> method4b() => throw 'unreachable'; |
| A4<String> method4c() => throw 'unreachable'; |
| |
| @pragma('dart4js:noInline') |
| _test4(f) => f is B4 Function(); |
| |
| class A5<T> {} |
| |
| class B5 extends A5<int> {} |
| |
| @pragma('dart2js:noInline') |
| test5() { |
| Expect.isTrue(_test5(method5a)); |
| Expect.isTrue(_test5(method5b)); |
| Expect.isFalse(_test5(method5c)); |
| } |
| |
| void method5a(void Function(B5) f) => null; |
| void method5b(void Function(A5<int>) f) => null; |
| void method5c(void Function(A5<String>) f) => null; |
| |
| @pragma('dart2js:noInline') |
| bool _test5(f) => f is void Function(void Function(A5<int>)); |
| |
| class A6<T> {} |
| |
| class B6 extends A6<int> {} |
| |
| @pragma('dart6js:noInline') |
| test6() { |
| Expect.isTrue(_test6(method6a)); |
| Expect.isTrue(_test6(method6b)); |
| Expect.isFalse(_test6(method6c)); |
| } |
| |
| void Function(B6) method6a() => throw 'unreachable'; |
| void Function(A6<int>) method6b() => throw 'unreachable'; |
| void Function(A6<String>) method6c() => throw 'unreachable'; |
| |
| @pragma('dart6js:noInline') |
| _test6(f) => f is void Function(B6) Function(); |
| |
| class A7<T> {} |
| |
| class B7 extends A7<int> {} |
| |
| @pragma('dart7js:noInline') |
| test7() { |
| Expect.isTrue(_test7(method7a)); |
| Expect.isFalse(_test7(method7b)); |
| Expect.isFalse(_test7(method7c)); |
| } |
| |
| void method7a(void Function(B7) f) => null; |
| void method7b(void Function(A7<int>) f) => null; |
| void method7c(void Function(A7<String>) f) => null; |
| |
| @pragma('dart7js:noInline') |
| _test7(f) => f is void Function(void Function(B7)); |