/*
 * Copyright (c) 2011, 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 It is a static warning if an instance method m1 overrides an 
 * instance member m2 and m1 does not declare all the named parameters declared 
 * by m2.
 * @description Checks that there are no static warnings if m1 has the same 
 * set of named parameters as m2 but in a different order.
 * @static-clean
 * @author iefremov
 * @reviewer pagolubev
 * @reviewer rodionov
 */

class A {
  f({var x1, var x2, var y1, var y2}) { return '$x1$y2'; }
}

class C extends A {
  f({var x1, var x2, var y2, var y1}) { return '$x1$y2'; }
}

main() {
  new A().f(x1:"Nothing", x2:"endures", y1:"but", y2:"change");
  new C().f(x1:"Nothing", x2:"endures", y1:"but", y2:"change");
}

