blob: 4a9997b7b6aefbdd4aec77bca27bcbed6b34a3c5 [file] [log] [blame]
// 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';
}