mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:56:57 +00:00
fc1b1ecc71
Change-Id: Idbcc965a27e9ffeedf5e0a1068b019de4193070f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127745 Commit-Queue: Bob Nystrom <rnystrom@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
64 lines
1.7 KiB
Dart
64 lines
1.7 KiB
Dart
// Copyright (c) 2018, 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.
|
|
|
|
// Regression test case for DDC bug where if a getter/setter is mixed in
|
|
// without a corresponding getter/setter, DDC fails to install a the
|
|
// corresponding getter/setter that calls super.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
abstract class C<E> {
|
|
E get first;
|
|
set first(E value);
|
|
E operator [](int index);
|
|
operator []=(int index, E value);
|
|
}
|
|
|
|
abstract class CMixin<E> implements C<E> {
|
|
E get first => this[0];
|
|
set first(E x) {
|
|
this[0] = x;
|
|
}
|
|
}
|
|
|
|
abstract class CBase<E> extends Object with CMixin<E> {}
|
|
|
|
abstract class DMixin<E> implements C<E> {
|
|
set first(E _) => throw new UnsupportedError('');
|
|
operator []=(int index, E value) => throw new UnsupportedError('');
|
|
}
|
|
|
|
abstract class DBase<E> = CBase<E> with DMixin<E>;
|
|
|
|
class DView<E> extends DBase<E> {
|
|
final Iterable<E> _source;
|
|
DView(this._source);
|
|
E operator [](int index) => _source.elementAt(index);
|
|
}
|
|
|
|
abstract class FMixin<E> implements C<E> {
|
|
E get first => throw new UnsupportedError('');
|
|
E operator [](int index) => throw new UnsupportedError('');
|
|
}
|
|
|
|
class FView<E> extends CBase<E> with FMixin<E> {
|
|
List<E> _values;
|
|
FView(this._values);
|
|
operator []=(int index, E value) {
|
|
_values[index] = value;
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
var d = new DView([3]);
|
|
Expect.equals(3, d.first);
|
|
Expect.throws(() => d.first = 42, (e) => e is UnsupportedError);
|
|
|
|
var list = [3];
|
|
var f = new FView(list);
|
|
f.first = 42;
|
|
Expect.equals(42, list[0]);
|
|
Expect.throws(() => f.first, (e) => e is UnsupportedError);
|
|
}
|