Skip to content

Commit 96381b7

Browse files
sjindel-googlecommit-bot@chromium.org
authored andcommitted
[kernel] Introduce 'forwardingStubInterfaceTarget' field for Procedures.
First step in fixing issue #31519. Change-Id: I8df86954993ae5edd59ad2edc57179725880c1d9 Reviewed-on: https://dart-review.googlesource.com/34143 Commit-Queue: Samir Jindel <[email protected]> Reviewed-by: Dmitry Stefantsov <[email protected]>
1 parent e9daa98 commit 96381b7

File tree

7 files changed

+16
-2
lines changed

7 files changed

+16
-2
lines changed

pkg/kernel/binary.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ type Procedure extends Member {
356356
List<Expression> annotations;
357357
// Only present if the 'isForwardingStub' flag is set.
358358
Option<MemberReference> forwardingStubSuperTarget;
359+
Option<MemberReference> forwardingStubInterfaceTarget;
359360
// Can only be absent if abstract, but tag is there anyway.
360361
Option<FunctionNode> function;
361362
}

pkg/kernel/lib/ast.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1491,6 +1491,7 @@ class Procedure extends Member implements FileUriNode {
14911491
Uri fileUri;
14921492

14931493
Reference forwardingStubSuperTarget;
1494+
Reference forwardingStubInterfaceTarget;
14941495

14951496
Procedure(Name name, this.kind, this.function,
14961497
{bool isAbstract: false,
@@ -1502,7 +1503,8 @@ class Procedure extends Member implements FileUriNode {
15021503
int transformerFlags: 0,
15031504
this.fileUri,
15041505
Reference reference,
1505-
this.forwardingStubSuperTarget})
1506+
this.forwardingStubSuperTarget,
1507+
this.forwardingStubInterfaceTarget})
15061508
: super(name, reference) {
15071509
function?.parent = this;
15081510
this.isAbstract = isAbstract;

pkg/kernel/lib/binary/ast_from_binary.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,8 @@ class BinaryBuilder {
932932
_disableLazyReading;
933933
var forwardingStubSuperTarget =
934934
readAndCheckOptionTag() ? readMemberReference() : null;
935+
var forwardingStubInterfaceTarget =
936+
readAndCheckOptionTag() ? readMemberReference() : null;
935937
var function = readFunctionNodeOption(!readFunctionNodeNow, endOffset);
936938
var transformerFlags = getAndResetTransformerFlags();
937939
assert(((_) => true)(debugPath.removeLast()));
@@ -947,6 +949,7 @@ class BinaryBuilder {
947949
function?.parent = node;
948950
node.setTransformerFlagsWithoutLazyLoading(transformerFlags);
949951
node.forwardingStubSuperTarget = forwardingStubSuperTarget;
952+
node.forwardingStubInterfaceTarget = forwardingStubInterfaceTarget;
950953

951954
assert((node.forwardingStubSuperTarget != null) ||
952955
!(node.isForwardingStub && node.function.body != null));

pkg/kernel/lib/binary/ast_to_binary.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ class BinaryPrinter extends Visitor implements BinarySink {
766766
writeUriReference(node.fileUri);
767767
writeAnnotationList(node.annotations);
768768
writeOptionalReference(node.forwardingStubSuperTarget);
769+
writeOptionalReference(node.forwardingStubInterfaceTarget);
769770
writeOptionalNode(node.function);
770771
_variableIndexer = null;
771772

pkg/kernel/lib/clone.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,8 @@ class CloneVisitor extends TreeVisitor {
404404
isForwardingSemiStub: node.isForwardingSemiStub,
405405
transformerFlags: node.transformerFlags,
406406
fileUri: node.fileUri,
407-
forwardingStubSuperTarget: node.forwardingStubSuperTarget)
407+
forwardingStubSuperTarget: node.forwardingStubSuperTarget,
408+
forwardingStubInterfaceTarget: node.forwardingStubInterfaceTarget)
408409
..fileEndOffset = node.fileEndOffset
409410
..isGenericContravariant = node.isGenericContravariant;
410411
}

runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,11 @@ void ProcedureHelper::ReadUntilExcluding(Field field) {
231231
forwarding_stub_super_target_ = builder_->ReadCanonicalNameReference();
232232
}
233233
if (++next_read_ == field) return;
234+
case kForwardingStubInterfaceTarget:
235+
if (builder_->ReadTag() == kSomething) {
236+
builder_->ReadCanonicalNameReference();
237+
}
238+
if (++next_read_ == field) return;
234239
case kFunction:
235240
if (builder_->ReadTag() == kSomething)
236241
builder_->SkipFunctionNode(); // read function node.

runtime/vm/compiler/frontend/kernel_binary_flowgraph.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ class ProcedureHelper {
246246
kSourceUriIndex,
247247
kAnnotations,
248248
kForwardingStubSuperTarget,
249+
kForwardingStubInterfaceTarget,
249250
kFunction,
250251
kEnd,
251252
};

0 commit comments

Comments
 (0)