Skip to content

Commit e91aec8

Browse files
jensjohaCommit Queue
authored andcommitted
[vm] Support non-class 'constructors' when calculating const coverage
With https://dart-review.googlesource.com/c/sdk/+/461160 const coverage "constructors" can include extension type "constructors". The CL was reverted (https://dart-review.googlesource.com/c/sdk/+/461480) because it made the VM crash. This CL should make it work. TEST=covered by existing tests Change-Id: I3a24932a60cc97780e1a1f27bef474e825172e0e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/461500 Commit-Queue: Jens Johansen <jensj@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
1 parent 3ea8503 commit e91aec8

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

runtime/vm/kernel.cc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,18 +234,19 @@ ArrayPtr Script::CollectConstConstructorCoverageFromKernel() const {
234234

235235
kernel::KernelReaderHelper kernel_reader(zone, &helper, data, 0);
236236

237-
// Read "constant coverage constructors".
237+
// Read "constant coverage constructors". Note that this also includes
238+
// "constructors" for extensions type which is actually toplevel methods.
238239
const intptr_t constant_coverage_constructors =
239240
kernel_reader.ReadListLength();
240241
const Array& constructors =
241242
Array::Handle(Array::New(constant_coverage_constructors));
243+
Object& member = Object::Handle(zone);
244+
Function& target = Function::Handle(zone);
242245
for (intptr_t i = 0; i < constant_coverage_constructors; ++i) {
243246
kernel::NameIndex kernel_name = kernel_reader.ReadCanonicalNameReference();
244-
Class& klass = Class::ZoneHandle(
245-
zone,
246-
helper.LookupClassByKernelClass(helper.EnclosingName(kernel_name)));
247-
const Function& target = Function::ZoneHandle(
248-
zone, helper.LookupConstructorByKernelConstructor(klass, kernel_name));
247+
member = helper.LookupMemberByMember(kernel_name);
248+
ASSERT(member.IsFunction());
249+
target = Function::Cast(member).ptr();
249250
constructors.SetAt(i, target);
250251
}
251252
return constructors.ptr();

0 commit comments

Comments
 (0)