| // Copyright (c) 2020, 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 |
| // @dart=2.9 |
| |
| import 'issue31767_lib.dart'; |
| |
| StringBuffer sb; |
| |
| class C { |
| final int w; |
| C.foo(int x, [int y = 0, int z = 0]) : w = p("x", x) + p("y", y) + p("z", z); |
| } |
| |
| int p(String name, int value) { |
| sb.write("$name = $value, "); |
| return value; |
| } |
| |
| mixin M on C { |
| int get w2 => w * w; |
| } |
| |
| class D = C with M; |
| |
| mixin N on A { |
| int get w2 => w * w; |
| } |
| |
| class E = A with N; |
| |
| main() { |
| sb = new StringBuffer(); |
| var a = A.foo(1, 2); |
| expect('x = 1, y = 2, z = 3, ', sb.toString()); |
| expect(6, a.w); |
| expect(5, a.a.field); |
| |
| sb = new StringBuffer(); |
| var c = C.foo(1, 2); |
| expect('x = 1, y = 2, z = 0, ', sb.toString()); |
| expect(3, c.w); |
| |
| sb = new StringBuffer(); |
| var d = D.foo(1, 2); |
| expect('x = 1, y = 2, z = 0, ', sb.toString()); |
| expect(3, d.w); |
| expect(9, d.w2); |
| |
| sb = new StringBuffer(); |
| var e = E.foo(1, 2); |
| expect('x = 1, y = 2, z = 3, ', sb.toString()); |
| expect(6, e.w); |
| expect(36, e.w2); |
| expect(5, e.a.field); |
| } |
| |
| expect(expected, actual) { |
| if (expected != actual) throw 'Expected $expected, actual $actual'; |
| } |