3c973fb292
Change-Id: I228058202855900f0adba73c1ab04d35180a6e5d Tested: this is an analyzer diagnostic only change Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/414900 Reviewed-by: Nate Bosch <nbosch@google.com> Commit-Queue: Devon Carew <devoncarew@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com>
36 lines
1.1 KiB
Dart
36 lines
1.1 KiB
Dart
// Copyright (c) 2024, 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.
|
|
|
|
import '../../common/testing.dart' as helper;
|
|
import 'package:expect/expect.dart';
|
|
|
|
import 'shared/shared.dart' show Base, Child1;
|
|
|
|
class Child extends Base {
|
|
@override
|
|
int method2() => 4;
|
|
}
|
|
|
|
/// A dynamic module is allowed to extend a class in the dynamic interface and
|
|
/// override its members.
|
|
///
|
|
/// This is similar to the `extend_class` test case, but includes more nuance,
|
|
/// like extending a non-leaf class that already was used in the program, since
|
|
/// that may affect dispatch logic based on some backends.
|
|
void main() async {
|
|
Base o = Child1();
|
|
Expect.equals(1, o.method1());
|
|
Expect.equals(3, o.method2());
|
|
Expect.equals(3, indirect(o));
|
|
Expect.equals(4, indirect(Child()));
|
|
o = (await helper.load('entry1.dart')) as Base;
|
|
Expect.equals(1, o.method1());
|
|
Expect.equals(2, o.method2());
|
|
Expect.equals(2, indirect(o));
|
|
helper.done();
|
|
}
|
|
|
|
@pragma('vm:never-inline')
|
|
int indirect(Base a) => a.method2();
|