4292d9cc28
+ use legacy erasure on weak mode const object checking + changes Null to subtype of Never when ignoring nullabilities Closes #43606 Closes #43624 Change-Id: Ief695829c550562ec1bfd0c1145cc33c584a4b8a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/165805 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
182 lines
4.3 KiB
Dart
182 lines
4.3 KiB
Dart
// Copyright (c) 2020, 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.
|
|
|
|
// Tests derived from co19/Language/Types/Function_Types/subtype_named_args_t04
|
|
// and language/nnbd/subtyping/function_type_required_params_test
|
|
|
|
bool inStrongMode = <int?>[] is! List<int>;
|
|
|
|
int f({required int i}) {
|
|
return i + 1;
|
|
}
|
|
|
|
int g({int i = 1}) {
|
|
return i + 1;
|
|
}
|
|
|
|
typedef int fType({required int i});
|
|
typedef int gType({int i});
|
|
typedef int bigType(
|
|
{required int i1,
|
|
required int i2,
|
|
required int i3,
|
|
required int i4,
|
|
required int i5,
|
|
required int i6,
|
|
required int i7,
|
|
required int i8,
|
|
required int i9,
|
|
required int i10,
|
|
required int i11,
|
|
required int i12,
|
|
required int i13,
|
|
required int i14,
|
|
required int i15,
|
|
required int i16,
|
|
required int i17,
|
|
required int i18,
|
|
required int i19,
|
|
required int i20,
|
|
required int i21,
|
|
required int i22,
|
|
required int i23,
|
|
required int i24,
|
|
required int i25,
|
|
required int i26,
|
|
required int i27,
|
|
required int i28,
|
|
required int i29,
|
|
required int i30,
|
|
required int i31,
|
|
required int i32,
|
|
required int i33,
|
|
required int i34,
|
|
required int i35,
|
|
required int i36,
|
|
required int i37,
|
|
required int i38,
|
|
required int i39,
|
|
required int i40,
|
|
required int i41,
|
|
required int i42,
|
|
required int i43,
|
|
required int i44,
|
|
required int i45,
|
|
required int i46,
|
|
required int i47,
|
|
required int i48,
|
|
required int i49,
|
|
required int i50,
|
|
required int i51,
|
|
required int i52,
|
|
required int i53,
|
|
required int i54,
|
|
required int i55,
|
|
required int i56,
|
|
required int i57,
|
|
required int i58,
|
|
required int i59,
|
|
required int i60,
|
|
required int i61,
|
|
required int i62,
|
|
required int i63,
|
|
required int i64,
|
|
required int i65,
|
|
required int i66,
|
|
required int i67,
|
|
required int i68,
|
|
required int i69,
|
|
required int i70});
|
|
|
|
class A {}
|
|
|
|
class A1 {}
|
|
|
|
class A2 {}
|
|
|
|
class B implements A, A1, A2 {}
|
|
|
|
class C implements B {}
|
|
|
|
class D implements C {}
|
|
|
|
typedef B func(Object o);
|
|
typedef B t1(int i, B b, Map<int, num> m, var x,
|
|
{required var ox,
|
|
required B ob,
|
|
required List<num> ol,
|
|
required bool obool});
|
|
|
|
B f1(int i, B b, Map<int, num> m, var x,
|
|
{required extraParam,
|
|
required bool obool,
|
|
required var ox,
|
|
required D ob,
|
|
required List<num>? ol}) =>
|
|
new B();
|
|
D f2(int i, D b, Map<int, int> m, func x,
|
|
{required func ox,
|
|
required D ob,
|
|
required List<int> ol,
|
|
required bool obool}) =>
|
|
new D();
|
|
C f3(num i, A b, Map<Object, Object> m, var x,
|
|
{required var ox,
|
|
required extraParam,
|
|
required A2 ob,
|
|
required List ol,
|
|
required Object obool}) =>
|
|
new C();
|
|
C f4(num i, A b, Map<Object, Object> m, var x,
|
|
{required var ox,
|
|
required A2 ob,
|
|
required List ol,
|
|
required bool obool,
|
|
required A xx,
|
|
required B yy}) =>
|
|
new C();
|
|
C f5(int i, A b, Map<Object, Object> m, var x,
|
|
{required ox, required B ob, required List ol, required obool}) =>
|
|
new C();
|
|
|
|
const f_is_fType = f is fType;
|
|
const f_is_gType = f is gType;
|
|
const g_is_fType = g is fType;
|
|
const g_is_gType = g is gType;
|
|
const f_is_bigType = f is bigType;
|
|
|
|
const f1_is_t1 = f1 is t1;
|
|
const f2_is_t1 = f2 is t1;
|
|
const f3_is_t1 = f3 is t1;
|
|
const f4_is_t1 = f4 is t1;
|
|
const f5_is_t1 = f5 is t1;
|
|
|
|
main() {
|
|
expect(true, f_is_fType);
|
|
expect(f is fType, f_is_fType);
|
|
expect(!inStrongMode, f_is_gType);
|
|
expect(f is gType, f_is_gType);
|
|
expect(true, g_is_fType);
|
|
expect(g is fType, g_is_fType);
|
|
expect(true, g_is_gType);
|
|
expect(g is gType, g_is_gType);
|
|
expect(false, f_is_bigType);
|
|
expect(f is bigType, f_is_bigType);
|
|
|
|
expect(false, f1_is_t1);
|
|
expect(f1 is t1, f1_is_t1);
|
|
expect(false, f2_is_t1);
|
|
expect(f2 is t1, f2_is_t1);
|
|
expect(!inStrongMode, f3_is_t1);
|
|
expect(f3 is t1, f3_is_t1);
|
|
expect(!inStrongMode, f4_is_t1);
|
|
expect(f4 is t1, f4_is_t1);
|
|
expect(true, f5_is_t1);
|
|
expect(f5 is t1, f5_is_t1);
|
|
}
|
|
|
|
expect(expected, actual) {
|
|
if (expected != actual) throw "Expected $expected, actual $actual";
|
|
}
|