blob: 917f6526015603f3164270b57d9e8441c511acfd [file] [log] [blame]
// 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.
// @dart = 2.9
// Verify that app-jit snapshot contains dependencies between classes and CHA
// optimized code.
import 'package:expect/expect.dart';
class A {
void getMyName() => getMyNameImpl();
void getMyNameImpl() => "A";
}
class B extends A {
void getMyNameImpl() => "B";
}
final Function makeA = () => new A();
final Function makeB = () => new B();
void optimizeGetMyName(dynamic obj) {
for (var i = 0; i < 100; i++) {
obj.getMyName();
}
Expect.equals("A", obj.getMyName());
}
void main(List<String> args) {
final isTraining = args.contains("--train");
final dynamic obj = (isTraining ? makeA : makeB)();
if (isTraining) {
for (var i = 0; i < 10; i++) {
optimizeGetMyName(obj);
}
Expect.equals('A', obj.getMyName());
print('OK(Trained)');
} else {
Expect.equals('B', obj.getMyName());
print('OK(Run)');
}
}