mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 02:17:58 +00:00
Skip abstract methods in member lookup for inference.
Change-Id: Ic07e1f6f038ebf6a9767c65777c0d6898131b632 Reviewed-on: https://dart-review.googlesource.com/19000 Reviewed-by: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
parent
6a31d08d59
commit
67d6c7095b
|
@ -1747,6 +1747,7 @@ abstract class KernelClosedWorldMixin implements ClosedWorldBase {
|
|||
cls, selector.name,
|
||||
setter: selector.isSetter);
|
||||
if (member != null &&
|
||||
!member.isAbstract &&
|
||||
(!selector.memberName.isPrivate ||
|
||||
member.library == selector.library)) {
|
||||
return member == element;
|
||||
|
|
|
@ -98,6 +98,9 @@ Future<CompiledData> computeData(
|
|||
}
|
||||
|
||||
void processMember(MemberEntity member) {
|
||||
if (member.isAbstract) {
|
||||
return;
|
||||
}
|
||||
if (skipUnprocessedMembers &&
|
||||
!closedWorld.processedMembers.contains(member)) {
|
||||
return;
|
||||
|
@ -455,6 +458,7 @@ Future<bool> compareData(
|
|||
bool skipUnprocessedMembers: false,
|
||||
bool skipFailedCompilations: false,
|
||||
bool verbose: false}) async {
|
||||
print('--from ast----------------------------------------------------------');
|
||||
CompiledData data1 = await computeData(
|
||||
entryPoint, memorySourceFiles, computeAstData,
|
||||
options: options,
|
||||
|
@ -462,6 +466,7 @@ Future<bool> compareData(
|
|||
skipUnprocessedMembers: skipUnprocessedMembers,
|
||||
skipFailedCompilations: skipFailedCompilations);
|
||||
if (data1 == null) return false;
|
||||
print('--from kernel-------------------------------------------------------');
|
||||
CompiledData data2 = await computeData(
|
||||
entryPoint, memorySourceFiles, computeIrData,
|
||||
options: [Flags.useKernel]..addAll(options),
|
||||
|
|
20
tests/compiler/dart2js/inference/data/abstract_method.dart
Normal file
20
tests/compiler/dart2js/inference/data/abstract_method.dart
Normal file
|
@ -0,0 +1,20 @@
|
|||
// Copyright (c) 2017, 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.
|
||||
|
||||
/*element: main:[null]*/
|
||||
main() {
|
||||
abstractEquals();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Call abstract method implemented by superclass.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*element: Class1.:[exact=Class1]*/
|
||||
class Class1 {
|
||||
operator ==(_);
|
||||
}
|
||||
|
||||
/*element: abstractEquals:[exact=JSBool]*/
|
||||
abstractEquals() => new Class1() /*invoke: [exact=Class1]*/ == new Class1();
|
|
@ -280,7 +280,6 @@ abstract class Class8 {
|
|||
/*invoke: [subclass=Class8]*/ method8();
|
||||
}
|
||||
|
||||
/*element: Class8.method8:[empty]*/
|
||||
method8();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue