Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d53f02a

Browse files
jensjohacommit-bot@chromium.org
authored andcommitted
Remove writeOptionalReference
References can be null --- it's written as the byte [0]. Thus in the null case it would before be [0] and now be [0]. In the non-null case it would before be [1, xyz] (1 for Tag.Something and xyz for the actual, now positive, uint30). Now it would be [xyz]. Change-Id: Ibc08d3afb7275b0429a4d6c5e667fbd381121489 Reviewed-on: https://dart-review.googlesource.com/c/85394 Reviewed-by: Kevin Millikin <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent 5ed1c61 commit d53f02a

7 files changed

Lines changed: 20 additions & 36 deletions

File tree

pkg/kernel/binary.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ type CanonicalName {
131131

132132
type ComponentFile {
133133
UInt32 magic = 0x90ABCDEF;
134-
UInt32 formatVersion = 14;
134+
UInt32 formatVersion = 15;
135135
Library[] libraries;
136136
UriSource sourceMap;
137137
List<CanonicalName> canonicalNames;
@@ -373,8 +373,8 @@ type Procedure extends Member {
373373
Name name;
374374
List<Expression> annotations;
375375
// Only present if the 'isForwardingStub' flag is set.
376-
Option<MemberReference> forwardingStubSuperTarget;
377-
Option<MemberReference> forwardingStubInterfaceTarget;
376+
MemberReference forwardingStubSuperTarget; // May be NullReference.
377+
MemberReference forwardingStubInterfaceTarget; // May be NullReference.
378378
// Can only be absent if abstract, but tag is there anyway.
379379
Option<FunctionNode> function;
380380
}
@@ -886,7 +886,7 @@ type StringConstant extends Constant {
886886

887887
type SymbolConstant extends Constant {
888888
Byte tag = 5;
889-
Option<LibraryReference> library;
889+
LibraryReference library; // May be NullReference.
890890
StringReference name;
891891
}
892892

pkg/kernel/lib/binary/ast_from_binary.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,7 @@ class BinaryBuilder {
216216
case ConstantTag.StringConstant:
217217
return new StringConstant(readStringReference());
218218
case ConstantTag.SymbolConstant:
219-
Reference libraryReference;
220-
if (readAndCheckOptionTag()) {
221-
libraryReference = readLibraryReference();
222-
}
219+
Reference libraryReference = readLibraryReference(allowNull: true);
223220
return new SymbolConstant(readStringReference(), libraryReference);
224221
case ConstantTag.MapConstant:
225222
final DartType keyType = readDartType();
@@ -1113,9 +1110,9 @@ class BinaryBuilder {
11131110
(kind == ProcedureKind.Factory && functionNodeSize <= 50) ||
11141111
_disableLazyReading;
11151112
var forwardingStubSuperTargetReference =
1116-
readAndCheckOptionTag() ? readMemberReference() : null;
1113+
readMemberReference(allowNull: true);
11171114
var forwardingStubInterfaceTargetReference =
1118-
readAndCheckOptionTag() ? readMemberReference() : null;
1115+
readMemberReference(allowNull: true);
11191116
var function = readFunctionNodeOption(!readFunctionNodeNow, endOffset);
11201117
var transformerFlags = getAndResetTransformerFlags();
11211118
assert(((_) => true)(debugPath.removeLast()));

pkg/kernel/lib/binary/ast_to_binary.dart

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
203203
writeStringReference(constant.value);
204204
} else if (constant is SymbolConstant) {
205205
writeByte(ConstantTag.SymbolConstant);
206-
writeOptionalReference(constant.libraryReference);
206+
writeNullAllowedReference(constant.libraryReference);
207207
writeStringReference(constant.name);
208208
} else if (constant is MapConstant) {
209209
writeByte(ConstantTag.MapConstant);
@@ -459,15 +459,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
459459
}
460460
}
461461

462-
void writeOptionalReference(Reference ref) {
463-
if (ref == null) {
464-
writeByte(Tag.Nothing);
465-
} else {
466-
writeByte(Tag.Something);
467-
writeNonNullReference(ref);
468-
}
469-
}
470-
471462
void writeLinkTable(Component component) {
472463
_binaryOffsetForLinkTable = getBufferOffset();
473464
writeList(_canonicalNameList, writeCanonicalNameEntry);
@@ -1107,8 +1098,8 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
11071098
writeByte(node.flags);
11081099
writeName(node.name ?? _emptyName);
11091100
writeAnnotationList(node.annotations);
1110-
writeOptionalReference(node.forwardingStubSuperTargetReference);
1111-
writeOptionalReference(node.forwardingStubInterfaceTargetReference);
1101+
writeNullAllowedReference(node.forwardingStubSuperTargetReference);
1102+
writeNullAllowedReference(node.forwardingStubInterfaceTargetReference);
11121103
writeOptionalFunctionNode(node.function);
11131104
leaveScope(memberScope: true);
11141105

pkg/kernel/lib/binary/tag.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class Tag {
136136
/// Internal version of kernel binary format.
137137
/// Bump it when making incompatible changes in kernel binaries.
138138
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
139-
static const int BinaryFormatVersion = 14;
139+
static const int BinaryFormatVersion = 15;
140140
}
141141

142142
abstract class ConstantTag {

runtime/vm/compiler/frontend/constant_evaluator.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,12 +1169,11 @@ const Array& ConstantHelper::ReadConstantTable() {
11691169
break;
11701170
}
11711171
case kSymbolConstant: {
1172-
Tag initializer_tag = helper_.ReadTag();
1173-
if (initializer_tag == kSomething) {
1174-
const NameIndex index = helper_.ReadCanonicalNameReference();
1175-
temp_library_ = H.LookupLibraryByKernelLibrary(index);
1176-
} else {
1172+
const NameIndex index = helper_.ReadCanonicalNameReference();
1173+
if (index == -1) {
11771174
temp_library_ = Library::null();
1175+
} else {
1176+
temp_library_ = H.LookupLibraryByKernelLibrary(index);
11781177
}
11791178
const String& symbol =
11801179
H.DartIdentifier(temp_library_, helper_.ReadStringReference());

runtime/vm/compiler/frontend/kernel_translation_helper.cc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,20 +1024,17 @@ void ProcedureHelper::ReadUntilExcluding(Field field) {
10241024
}
10251025
/* Falls through */
10261026
case kForwardingStubSuperTarget:
1027-
if (helper_->ReadTag() == kSomething) {
1028-
forwarding_stub_super_target_ = helper_->ReadCanonicalNameReference();
1029-
}
1027+
forwarding_stub_super_target_ = helper_->ReadCanonicalNameReference();
10301028
if (++next_read_ == field) return;
10311029
/* Falls through */
10321030
case kForwardingStubInterfaceTarget:
1033-
if (helper_->ReadTag() == kSomething) {
1034-
helper_->ReadCanonicalNameReference();
1035-
}
1031+
helper_->ReadCanonicalNameReference();
10361032
if (++next_read_ == field) return;
10371033
/* Falls through */
10381034
case kFunction:
1039-
if (helper_->ReadTag() == kSomething)
1035+
if (helper_->ReadTag() == kSomething) {
10401036
helper_->SkipFunctionNode(); // read function node.
1037+
}
10411038
if (++next_read_ == field) return;
10421039
/* Falls through */
10431040
case kEnd:

runtime/vm/kernel_binary.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace kernel {
1717
// package:kernel/binary.md.
1818

1919
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
20-
static const uint32_t kBinaryFormatVersion = 14;
20+
static const uint32_t kBinaryFormatVersion = 15;
2121

2222
// Keep in sync with package:kernel/lib/binary/tag.dart
2323
#define KERNEL_TAG_LIST(V) \

0 commit comments

Comments
 (0)