// Copyright (c) 2013, 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.

// @dart = 2.9

foo(x
    , static int y // //# 01: syntax error
    , final static y // //# 02: syntax error
    , {static y} // //# 03: syntax error
    , [static y] // //# 04: syntax error
    ) {}

class C {
  bar(x
      , static int y // //# 05: syntax error
      , final static y // //# 06: syntax error
      , {static y} // //# 07: syntax error
      , [static y] // //# 08: syntax error
      ) {}

  static baz(x
      , static int y // //# 09: syntax error
      , final static y // //# 10: syntax error
      , {static y} // //# 11: syntax error
      , [static y] // //# 12: syntax error
      ) {}
}

main() {
  foo(1
      , 1 // //# 01: continued
      , 1 // //# 02: continued
      , y: 1 // //# 03: continued
      , 1 // //# 04: continued
      );
  new C().bar(1
      , 1 // //# 05: continued
      , 1 // //# 06: continued
      , y: 1 // //# 07: continued
      , 1 // //# 08: continued
      );
  C.baz(1
      , 1 // //# 09: continued
      , 1 // //# 10: continued
      , y: 1 // //# 11: continued
      , 1 // //# 12: continued
      );
}
