blob: 09d44a0f2287550ef9ed86ceb257ced492912070 [file] [log] [blame]
// Copyright (c) 2019, 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.
// This test verifies that AOT compiler is correctly handling method extractors
// when resolving targets of method invocations.
import "package:expect/expect.dart";
abstract class MyQueue<E> {}
class MyListQueue<E> implements MyQueue<E> {
String toString() => 'good';
}
class NextRound {
runNextRound() {
// During the 2nd iteration of precompilation loop (Precompiler::Iterate)
// we're going to discover a call to get:toString() which is only resolved
// to Object.get:toString at this time, as MyListQueue.get:toString method
// extractor is not created yet. Verify that compiler doesn't use that
// target.
MyQueue q = new MyListQueue();
dynamic x = q.toString;
Expect.equals("good", x.call());
}
}
class NextRound2 {
runNextRound() {}
}
getNextRound(i) => i > 5 ? new NextRound() : new NextRound2();
void main() {
// During the 1st iteration of precompilation loop (Precompiler::Iterate)
// we need to create method extractor for Object.toString.
var x = new Object().toString;
x.call();
// Trigger the next round via new dynamic selector.
dynamic y = getNextRound(17);
y.runNextRound();
}