Chromium Code Reviews| Index: tests/language_2/additional_interface_adds_optional_args_test.dart |
| diff --git a/tests/language_2/additional_interface_adds_optional_args_test.dart b/tests/language_2/additional_interface_adds_optional_args_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5c9953e597e236a7287a2981e3581dd219425f49 |
| --- /dev/null |
| +++ b/tests/language_2/additional_interface_adds_optional_args_test.dart |
| @@ -0,0 +1,36 @@ |
| +// 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. |
| + |
| +// This test exercises a corner case of override checking that is safe from a |
| +// soundness perspective, but which we haven't decided whether or not to allow |
| +// from a usability perspective. |
| + |
| +class A { |
| + void foo() {} |
| +} |
| + |
| +abstract class I { |
| + void foo([x]); |
| +} |
| + |
| +abstract class B extends A implements I { |
| + // If this class were concrete, there would be a problem, since `new |
| + // B().foo(42)` would be statically allowed, but would lead to invalid |
| + // arguments being passed to A.foo. But since the class is abstract, there is |
| + // no problem. |
| +} |
| + |
| +class C extends B { |
| + void foo([x]) { |
| + super.foo(); |
|
Lasse Reichstein Nielsen
2017/08/30 06:00:42
Have tests that do `super.foo(x)` as well, and see
Paul Berry
2017/08/30 20:08:25
Good call. There are bugs related to this too.
A
|
| + } |
| +} |
| + |
| +void f(B b) { |
| + b.foo(42); |
| +} |
| + |
| +main() { |
| + f(new C()); |
| +} |