blob: 99a4494067d398649423de2b2e308d13f2634342 [file] [log] [blame] [edit]
// Copyright (c) 2023, 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.
// Verifies that VM doesn't crash when taking a constructor tear-off
// with nested function types.
// Regression test for https://github.com/dart-lang/sdk/issues/52179.
import 'package:expect/expect.dart';
class A<E> {
factory A({
bool Function(E, E)? a1,
int Function(E)? a2,
bool Function(dynamic)? a3,
}) {
return A<E>._();
}
A._();
}
main() {
dynamic x = A.new;
dynamic y = A<String>.new;
Expect.isTrue(
x
is A<T> Function<T>({
bool Function(T, T)? a1,
int Function(T)? a2,
bool Function(dynamic)? a3,
}),
);
Expect.isTrue(
y
is A<String> Function({
bool Function(String, String)? a1,
int Function(String)? a2,
bool Function(dynamic)? a3,
}),
);
Expect.isTrue(x() is A<dynamic>);
Expect.isTrue(x<int>() is A<int>);
Expect.isTrue(x(a3: (_) => true) is A<dynamic>);
Expect.isTrue(x<double>(a2: (double _) => 42) is A<double>);
Expect.isTrue(y() is A<String>);
}