OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 // This test exercises a corner case of override checking that is safe from a | |
6 // soundness perspective, but which we haven't decided whether or not to allow | |
7 // from a usability perspective. | |
8 | |
9 class A { | |
10 void foo() {} | |
11 } | |
12 | |
13 abstract class I { | |
14 void foo([x]); | |
15 } | |
16 | |
17 abstract class B extends A implements I { | |
18 // If this class were concrete, there would be a problem, since `new | |
19 // B().foo(42)` would be statically allowed, but would lead to invalid | |
20 // arguments being passed to A.foo. But since the class is abstract, there is | |
21 // no problem. | |
22 } | |
23 | |
24 class C extends B { | |
25 void foo([x]) { | |
26 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
| |
27 } | |
28 } | |
29 | |
30 void f(B b) { | |
31 b.foo(42); | |
32 } | |
33 | |
34 main() { | |
35 f(new C()); | |
36 } | |
OLD | NEW |