blob: 58f7c33e675b7702dadc62156a756ec79f9b59f8 [file] [log] [blame]
// Copyright (c) 2017, 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.
/*@testedFeatures=inference*/
library test;
void foo<E>(C<E> c, int cmp(E a, E b)) {}
class C<E> {
void barA([int cmp(E a, E b)]) {
/*@ typeArgs=C::E* */ foo(this, cmp /*@ target=Object::== */ ?? _default);
}
void barB([int cmp(E a, E b)]) {
/*@ typeArgs=C::E* */ foo(
this, cmp /*@ target=Object::== */ ?? (_default as int Function(E, E)));
}
void barC([int cmp(E a, E b)]) {
int Function(E, E) v = _default;
/*@ typeArgs=C::E* */ foo(this, cmp /*@ target=Object::== */ ?? v);
}
void barD([int cmp(E a, E b)]) {
foo<E>(this, cmp /*@ target=Object::== */ ?? _default);
}
void barE([int cmp(E a, E b)]) {
/*@ typeArgs=C::E* */ foo(
this, cmp /*@target=Object::==*/ == null ? _default : cmp);
}
void barF([int cmp(E a, E b)]) {
/*@ typeArgs=C::E* */ foo(
this, cmp /*@target=Object::==*/ != null ? cmp : _default);
}
static int _default(a, b) {
return /*@target=int::unary-*/ -1;
}
}
main() {}