[dart2js] Use addUnused method for unused fields in proto shaker
The call to the new method has fewer arguments, which helps code size. Change-Id: I50668e54bfba07ac34e8db99a748f7d83c6e5be4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378382 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Stephen Adams <sra@google.com>
This commit is contained in:
committed by
Commit Queue
parent
d64e4dc981
commit
e28c480e12
@@ -112,6 +112,10 @@ class ProtobufImpactHandler implements ConditionalImpactHandler {
|
||||
_builderInfoAddMethod.getterType as ir.FunctionType,
|
||||
const <ir.DartType>[ir.NullType()]);
|
||||
|
||||
late final ir.Procedure? _builderInfoAddUnusedMethod = _elementMap
|
||||
.env.libraryIndex
|
||||
.tryGetProcedure(protobufLibraryUri, 'BuilderInfo', 'addUnused');
|
||||
|
||||
static const String metadataFieldName = '_i';
|
||||
|
||||
// All of those methods have the dart field name as second positional
|
||||
@@ -142,25 +146,39 @@ class ProtobufImpactHandler implements ConditionalImpactHandler {
|
||||
|
||||
ir.InstanceInvocation _buildProtobufMetadataPlaceholder(
|
||||
ir.InstanceInvocation node) {
|
||||
return ir.InstanceInvocation(
|
||||
ir.InstanceAccessKind.Instance,
|
||||
_CloneVisitorLenientVariables().clone(node.receiver),
|
||||
_builderInfoAddMethod.name,
|
||||
ir.Arguments(
|
||||
<ir.Expression>[
|
||||
ir.IntLiteral(0), // tagNumber
|
||||
ir.NullLiteral(), // name
|
||||
ir.NullLiteral(), // fieldType
|
||||
ir.NullLiteral(), // defaultOrMaker
|
||||
ir.NullLiteral(), // subBuilder
|
||||
ir.NullLiteral(), // valueOf
|
||||
ir.NullLiteral(), // enumValues
|
||||
],
|
||||
types: <ir.DartType>[const ir.NullType()],
|
||||
),
|
||||
interfaceTarget: _builderInfoAddMethod,
|
||||
functionType: _typeOfBuilderInfoAddOfNull)
|
||||
..fileOffset = node.fileOffset;
|
||||
final addUnusedMethod = _builderInfoAddUnusedMethod;
|
||||
if (addUnusedMethod == null) {
|
||||
// Legacy version, call `add` method.
|
||||
return ir.InstanceInvocation(
|
||||
ir.InstanceAccessKind.Instance,
|
||||
_CloneVisitorLenientVariables().clone(node.receiver),
|
||||
_builderInfoAddMethod.name,
|
||||
ir.Arguments(
|
||||
<ir.Expression>[
|
||||
ir.IntLiteral(0), // tagNumber
|
||||
ir.NullLiteral(), // name
|
||||
ir.NullLiteral(), // fieldType
|
||||
ir.NullLiteral(), // defaultOrMaker
|
||||
ir.NullLiteral(), // subBuilder
|
||||
ir.NullLiteral(), // valueOf
|
||||
ir.NullLiteral(), // enumValues
|
||||
],
|
||||
types: <ir.DartType>[const ir.NullType()],
|
||||
),
|
||||
interfaceTarget: _builderInfoAddMethod,
|
||||
functionType: _typeOfBuilderInfoAddOfNull)
|
||||
..fileOffset = node.fileOffset;
|
||||
} else {
|
||||
// New version, call `addUnused` method.
|
||||
return ir.InstanceInvocation(
|
||||
ir.InstanceAccessKind.Instance,
|
||||
_CloneVisitorLenientVariables().clone(node.receiver),
|
||||
addUnusedMethod.name,
|
||||
ir.Arguments([]),
|
||||
interfaceTarget: addUnusedMethod,
|
||||
functionType: addUnusedMethod.getterType as ir.FunctionType)
|
||||
..fileOffset = node.fileOffset;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -123,6 +123,11 @@ class LibraryIndex {
|
||||
return _getLibraryIndex(library).getProcedure(containerName, memberName);
|
||||
}
|
||||
|
||||
Procedure? tryGetProcedure(
|
||||
String library, String containerName, String memberName) {
|
||||
return _getLibraryIndex(library).tryGetProcedure(containerName, memberName);
|
||||
}
|
||||
|
||||
Field getField(String library, String containerName, String memberName) {
|
||||
return _getLibraryIndex(library).getField(containerName, memberName);
|
||||
}
|
||||
@@ -225,6 +230,10 @@ class _ContainerTable {
|
||||
return _getContainerIndex(className).getProcedure(memberName);
|
||||
}
|
||||
|
||||
Procedure? tryGetProcedure(String className, String memberName) {
|
||||
return _getContainerIndex(className).tryGetProcedure(memberName);
|
||||
}
|
||||
|
||||
Field getField(String className, String memberName) {
|
||||
return _getContainerIndex(className).getField(memberName);
|
||||
}
|
||||
@@ -411,6 +420,16 @@ class _MemberTable {
|
||||
return member;
|
||||
}
|
||||
|
||||
Procedure? tryGetProcedure(String name) {
|
||||
Member? member = members[name];
|
||||
if (member == null) return null;
|
||||
if (member is! Procedure) {
|
||||
throw "Member '$name' in $containerName is not a Procedure: "
|
||||
"${member} (${member.runtimeType}).";
|
||||
}
|
||||
return member;
|
||||
}
|
||||
|
||||
Field getField(String name) {
|
||||
Member member = getMember(name);
|
||||
if (member is! Field) {
|
||||
|
||||
Reference in New Issue
Block a user