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

Commit 65184a9

Browse files
Chloe Stefantsovacommit-bot@chromium.org
Chloe Stefantsova
authored andcommitted
[cfe] Don't serialize an empty show/hide clause
TEST=existing Change-Id: Ie63444c4dbeaa45b38fd195e554780f14fed878e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/213767 Commit-Queue: Chloe Stefantsova <[email protected]> Reviewed-by: Jens Johansen <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 1197e15 commit 65184a9

File tree

6 files changed

+70
-54
lines changed

6 files changed

+70
-54
lines changed

pkg/kernel/binary.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ type CanonicalName {
147147

148148
type ComponentFile {
149149
UInt32 magic = 0x90ABCDEF;
150-
UInt32 formatVersion = 71;
150+
UInt32 formatVersion = 72;
151151
Byte[10] shortSdkHash;
152152
List<String> problemsAsJson; // Described in problems.md.
153153
Library[] libraries;
@@ -346,6 +346,10 @@ type Extension extends Node {
346346
Byte flags (isExtensionTypeDeclaration);
347347
List<TypeParameter> typeParameters;
348348
DartType onType;
349+
Option<ExtensionTypeShowHideClause> showHideClause;
350+
}
351+
352+
type ExtensionTypeShowHideClause {
349353
List<DartType> shownSupertypes;
350354
List<CanonicalNameReference> shownMembers;
351355
List<CanonicalNameReference> shownGetters;

pkg/kernel/lib/binary/ast_from_binary.dart

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -529,14 +529,15 @@ class BinaryBuilder {
529529
growable: useGrowableLists);
530530
}
531531

532-
List<Reference> readNonNullReferenceList() {
532+
List<Reference> readNonNullReferenceList(List<Reference> result) {
533533
int length = readUInt30();
534534
if (!useGrowableLists && length == 0) {
535535
return emptyListOfReference;
536536
}
537-
return new List<Reference>.generate(
538-
length, (_) => readNonNullMemberReference(),
539-
growable: useGrowableLists);
537+
for (int i = 0; i < length; ++i) {
538+
result.add(readNonNullMemberReference());
539+
}
540+
return result;
540541
}
541542

542543
String? readStringOrNullIfEmpty() {
@@ -1458,32 +1459,27 @@ class BinaryBuilder {
14581459

14591460
readAndPushTypeParameterList(node.typeParameters, node);
14601461
DartType onType = readDartType();
1461-
List<Supertype> shownSupertypes = readSupertypeList();
1462-
List<Reference> shownMembers = readNonNullReferenceList();
1463-
List<Reference> shownGetters = readNonNullReferenceList();
1464-
List<Reference> shownSetters = readNonNullReferenceList();
1465-
List<Reference> shownOperators = readNonNullReferenceList();
1466-
List<Supertype> hiddenSupertypes = readSupertypeList();
1467-
List<Reference> hiddenMembers = readNonNullReferenceList();
1468-
List<Reference> hiddenGetters = readNonNullReferenceList();
1469-
List<Reference> hiddenSetters = readNonNullReferenceList();
1470-
List<Reference> hiddenOperators = readNonNullReferenceList();
1462+
1463+
if (readAndCheckOptionTag()) {
1464+
ExtensionTypeShowHideClause showHideClause =
1465+
node.showHideClause = new ExtensionTypeShowHideClause();
1466+
readSupertypeList(showHideClause.shownSupertypes);
1467+
readNonNullReferenceList(showHideClause.shownMethods);
1468+
readNonNullReferenceList(showHideClause.shownGetters);
1469+
readNonNullReferenceList(showHideClause.shownSetters);
1470+
readNonNullReferenceList(showHideClause.shownOperators);
1471+
readSupertypeList(showHideClause.hiddenSupertypes);
1472+
readNonNullReferenceList(showHideClause.hiddenMethods);
1473+
readNonNullReferenceList(showHideClause.hiddenGetters);
1474+
readNonNullReferenceList(showHideClause.hiddenSetters);
1475+
readNonNullReferenceList(showHideClause.hiddenOperators);
1476+
}
1477+
14711478
typeParameterStack.length = 0;
14721479

14731480
node.name = name;
14741481
node.fileUri = fileUri;
14751482
node.onType = onType;
1476-
node.showHideClause = new ExtensionTypeShowHideClause()
1477-
..shownSupertypes.addAll(shownSupertypes)
1478-
..shownMethods.addAll(shownMembers)
1479-
..shownGetters.addAll(shownGetters)
1480-
..shownSetters.addAll(shownSetters)
1481-
..shownOperators.addAll(shownOperators)
1482-
..hiddenSupertypes.addAll(hiddenSupertypes)
1483-
..hiddenMethods.addAll(hiddenMembers)
1484-
..hiddenGetters.addAll(hiddenGetters)
1485-
..hiddenSetters.addAll(hiddenSetters)
1486-
..hiddenOperators.addAll(hiddenOperators);
14871483

14881484
node.members = _readExtensionMemberDescriptorList();
14891485

@@ -2949,15 +2945,22 @@ class BinaryBuilder {
29492945
return readAndCheckOptionTag() ? readSupertype() : null;
29502946
}
29512947

2952-
List<Supertype> readSupertypeList() {
2948+
List<Supertype> readSupertypeList([List<Supertype>? result]) {
29532949
int length = readUInt30();
29542950
if (!useGrowableLists && length == 0) {
29552951
// When lists don't have to be growable anyway, we might as well use an
29562952
// almost constant one for the empty list.
29572953
return emptyListOfSupertype;
29582954
}
2959-
return new List<Supertype>.generate(length, (_) => readSupertype(),
2960-
growable: useGrowableLists);
2955+
if (result != null) {
2956+
for (int i = 0; i < length; ++i) {
2957+
result.add(readSupertype());
2958+
}
2959+
return result;
2960+
} else {
2961+
return new List<Supertype>.generate(length, (_) => readSupertype(),
2962+
growable: useGrowableLists);
2963+
}
29612964
}
29622965

29632966
List<DartType> readDartTypeList() {

pkg/kernel/lib/binary/ast_to_binary.dart

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2451,18 +2451,24 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
24512451
enterScope(typeParameters: node.typeParameters);
24522452
writeNodeList(node.typeParameters);
24532453
writeDartType(node.onType);
2454-
ExtensionTypeShowHideClause showHideClause =
2455-
node.showHideClause ?? new ExtensionTypeShowHideClause();
2456-
writeNodeList(showHideClause.shownSupertypes);
2457-
writeList(showHideClause.shownMethods, writeNonNullReference);
2458-
writeList(showHideClause.shownGetters, writeNonNullReference);
2459-
writeList(showHideClause.shownSetters, writeNonNullReference);
2460-
writeList(showHideClause.shownOperators, writeNonNullReference);
2461-
writeNodeList(showHideClause.hiddenSupertypes);
2462-
writeList(showHideClause.hiddenMethods, writeNonNullReference);
2463-
writeList(showHideClause.hiddenGetters, writeNonNullReference);
2464-
writeList(showHideClause.hiddenSetters, writeNonNullReference);
2465-
writeList(showHideClause.hiddenOperators, writeNonNullReference);
2454+
2455+
ExtensionTypeShowHideClause? showHideClause = node.showHideClause;
2456+
if (showHideClause == null) {
2457+
writeByte(Tag.Nothing);
2458+
} else {
2459+
writeByte(Tag.Something);
2460+
writeNodeList(showHideClause.shownSupertypes);
2461+
writeList(showHideClause.shownMethods, writeNonNullReference);
2462+
writeList(showHideClause.shownGetters, writeNonNullReference);
2463+
writeList(showHideClause.shownSetters, writeNonNullReference);
2464+
writeList(showHideClause.shownOperators, writeNonNullReference);
2465+
writeNodeList(showHideClause.hiddenSupertypes);
2466+
writeList(showHideClause.hiddenMethods, writeNonNullReference);
2467+
writeList(showHideClause.hiddenGetters, writeNonNullReference);
2468+
writeList(showHideClause.hiddenSetters, writeNonNullReference);
2469+
writeList(showHideClause.hiddenOperators, writeNonNullReference);
2470+
}
2471+
24662472
leaveScope(typeParameters: node.typeParameters);
24672473

24682474
final int len = node.members.length;

pkg/kernel/lib/binary/tag.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class Tag {
176176
/// Internal version of kernel binary format.
177177
/// Bump it when making incompatible changes in kernel binaries.
178178
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
179-
static const int BinaryFormatVersion = 71;
179+
static const int BinaryFormatVersion = 72;
180180
}
181181

182182
abstract class ConstantTag {

runtime/vm/kernel_binary.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ namespace kernel {
2020
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
2121

2222
// Both version numbers are inclusive.
23-
static const uint32_t kMinSupportedKernelFormatVersion = 71;
24-
static const uint32_t kMaxSupportedKernelFormatVersion = 71;
23+
static const uint32_t kMinSupportedKernelFormatVersion = 72;
24+
static const uint32_t kMaxSupportedKernelFormatVersion = 72;
2525

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

runtime/vm/kernel_loader.cc

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,16 +1089,19 @@ void KernelLoader::FinishTopLevelClassLoading(
10891089
helper_.ReadByte(); // skip flags.
10901090
helper_.SkipTypeParametersList(); // skip type parameter list.
10911091
helper_.SkipDartType(); // skip on-type.
1092-
helper_.SkipListOfDartTypes(); // skip shown types.
1093-
helper_.SkipListOfCanonicalNameReferences(); // skip shown members.
1094-
helper_.SkipListOfCanonicalNameReferences(); // skip shown getters.
1095-
helper_.SkipListOfCanonicalNameReferences(); // skip shown setters.
1096-
helper_.SkipListOfCanonicalNameReferences(); // skip shown operators.
1097-
helper_.SkipListOfDartTypes(); // skip hidden types.
1098-
helper_.SkipListOfCanonicalNameReferences(); // skip hidden members.
1099-
helper_.SkipListOfCanonicalNameReferences(); // skip hidden getters.
1100-
helper_.SkipListOfCanonicalNameReferences(); // skip hidden setters.
1101-
helper_.SkipListOfCanonicalNameReferences(); // skip hidden operators.
1092+
Tag tag = helper_.ReadTag();
1093+
if (tag != kNothing) {
1094+
helper_.SkipListOfDartTypes(); // skip shown types.
1095+
helper_.SkipListOfCanonicalNameReferences(); // skip shown members.
1096+
helper_.SkipListOfCanonicalNameReferences(); // skip shown getters.
1097+
helper_.SkipListOfCanonicalNameReferences(); // skip shown setters.
1098+
helper_.SkipListOfCanonicalNameReferences(); // skip shown operators.
1099+
helper_.SkipListOfDartTypes(); // skip hidden types.
1100+
helper_.SkipListOfCanonicalNameReferences(); // skip hidden members.
1101+
helper_.SkipListOfCanonicalNameReferences(); // skip hidden getters.
1102+
helper_.SkipListOfCanonicalNameReferences(); // skip hidden setters.
1103+
helper_.SkipListOfCanonicalNameReferences(); // skip hidden operators.
1104+
}
11021105

11031106
const intptr_t extension_member_count = helper_.ReadListLength();
11041107
for (intptr_t j = 0; j < extension_member_count; ++j) {

0 commit comments

Comments
 (0)