/*
 * 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.
 */
/**
 * @assertion The modifier required is added as a built-in identifier. The
 * grammar of function types is extended to allow any named parameter
 * declaration to be prefixed by the required modifier (e.g. int Function(int,
 * {int? y, required int z}).
 *
 * @description Check that it is a compile error if 'required' modifier is
 * misplaced
 * @author sgrekhov@unipro.ru
 */

class A {}

typedef String Foo1(required int x, {String z, required String y});
//                  ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

typedef String Foo2(int x, [String z, required String y]);
//                                    ^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified

typedef String Foo3(int x, {String z, final required A y});
//                                    ^^^^^
// [analyzer] unspecified
// [cfe] unspecified

main() {
}
