blob: 042af4855d42447d6779506e0277770b6bafb365 [file] [log] [blame]
// 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.
/// Test that implicit generic function instantiations are inserted based on
/// the pattern's context type, but not when destructuring.
import "package:expect/expect.dart";
main() {
// Does not instantiate during destructuring. Therefore, these are errors
// because the type of the value isn't assignable to the pattern's type.
(TFn,) record = (id,);
var (IntFn b,) = record;
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT
// ^
// [cfe] The matched value of type 'T Function<T>(T)' isn't assignable to the required type 'int Function(int)'.
List<TFn> list = [id];
var [IntFn c] = list;
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT
// ^
// [cfe] The matched value of type 'T Function<T>(T)' isn't assignable to the required type 'int Function(int)'.
Map<String, TFn> map = {'x': id};
var {'x': IntFn d} = map;
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT
// ^
// [cfe] The matched value of type 'T Function<T>(T)' isn't assignable to the required type 'int Function(int)'.
Box<TFn> box = Box(id);
var Box<TFn>(value: IntFn e) = box;
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT
// ^
// [cfe] The matched value of type 'T Function<T>(T)' isn't assignable to the required type 'int Function(int)'.
}
T id<T>(T t) => t;
class Box<T> {
final T value;
Box(this.value);
}
typedef IntFn = int Function(int);
typedef TFn = T Function<T>(T);