mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:09:49 +00:00
Remove scope elements, such as type parameters, after using when writing summaries.
Bug: https://github.com/dart-lang/sdk/issues/46981 Change-Id: I2f7ad246e376bffc9e67f548d979c211894668a3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/211200 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
2a5c85e7cf
commit
8d5c80ce83
|
@ -245,17 +245,16 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
|
|||
void visitFieldFormalParameter(FieldFormalParameter node) {
|
||||
_writeByte(Tag.FieldFormalParameter);
|
||||
|
||||
_pushScopeTypeParameters(node.typeParameters);
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.type);
|
||||
_writeOptionalNode(node.parameters);
|
||||
_storeNormalFormalParameter(
|
||||
node,
|
||||
node.keyword,
|
||||
hasQuestion: node.question != null,
|
||||
);
|
||||
|
||||
_sink.localElements.popScope();
|
||||
_withTypeParameters(node.typeParameters, () {
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.type);
|
||||
_writeOptionalNode(node.parameters);
|
||||
_storeNormalFormalParameter(
|
||||
node,
|
||||
node.keyword,
|
||||
hasQuestion: node.question != null,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -325,13 +324,12 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
|
|||
void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
|
||||
_writeByte(Tag.FunctionTypedFormalParameter);
|
||||
|
||||
_pushScopeTypeParameters(node.typeParameters);
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.returnType);
|
||||
_writeNode(node.parameters);
|
||||
_storeNormalFormalParameter(node, null);
|
||||
|
||||
_sink.localElements.popScope();
|
||||
_withTypeParameters(node.typeParameters, () {
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.returnType);
|
||||
_writeNode(node.parameters);
|
||||
_storeNormalFormalParameter(node, null);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -344,14 +342,12 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
|
|||
),
|
||||
);
|
||||
|
||||
_pushScopeTypeParameters(node.typeParameters);
|
||||
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.returnType);
|
||||
_writeNode(node.parameters);
|
||||
|
||||
_sink.writeType(node.type);
|
||||
_sink.localElements.popScope();
|
||||
_withTypeParameters(node.typeParameters, () {
|
||||
_writeOptionalNode(node.typeParameters);
|
||||
_writeOptionalNode(node.returnType);
|
||||
_writeNode(node.parameters);
|
||||
_sink.writeType(node.type);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -776,18 +772,6 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
|
|||
_storeAnnotatedNode(node);
|
||||
}
|
||||
|
||||
void _pushScopeTypeParameters(TypeParameterList? node) {
|
||||
_sink.localElements.pushScope();
|
||||
|
||||
if (node == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var typeParameter in node.typeParameters) {
|
||||
_sink.localElements.declare(typeParameter.declaredElement!);
|
||||
}
|
||||
}
|
||||
|
||||
void _storeAnnotatedNode(AnnotatedNode node) {
|
||||
_writeNodeList(node.metadata);
|
||||
}
|
||||
|
@ -850,6 +834,19 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
|
|||
_storeFormalParameter(node);
|
||||
}
|
||||
|
||||
void _withTypeParameters(TypeParameterList? node, void Function() f) {
|
||||
if (node == null) {
|
||||
f();
|
||||
} else {
|
||||
var elements = node.typeParameters
|
||||
.map((typeParameter) => typeParameter.declaredElement!)
|
||||
.toList();
|
||||
_sink.localElements.withElements(elements, () {
|
||||
f();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _writeActualType(ResolutionSink resolutionSink, DartType type) {
|
||||
resolutionSink.writeType(type);
|
||||
}
|
||||
|
|
|
@ -160,16 +160,12 @@ class BundleWriter {
|
|||
ConstructorElementFlags.write(_sink, element);
|
||||
_resolutionSink._writeAnnotationList(element.metadata);
|
||||
|
||||
_resolutionSink.localElements.pushScope();
|
||||
_resolutionSink.localElements.declareAll(element.parameters);
|
||||
try {
|
||||
_resolutionSink.localElements.withElements(element.parameters, () {
|
||||
_writeList(element.parameters, _writeParameterElement);
|
||||
_writeMacro(element.macro);
|
||||
_resolutionSink.writeElement(element.redirectedConstructor);
|
||||
_resolutionSink._writeNodeList(element.constantInitializers);
|
||||
} finally {
|
||||
_resolutionSink.localElements.popScope();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _writeEnumElement(ClassElement element) {
|
||||
|
@ -430,14 +426,10 @@ class BundleWriter {
|
|||
List<TypeParameterElement> typeParameters,
|
||||
void Function() f,
|
||||
) {
|
||||
_resolutionSink.localElements.pushScope();
|
||||
_resolutionSink.localElements.declareAll(typeParameters);
|
||||
try {
|
||||
_resolutionSink.localElements.withElements(typeParameters, () {
|
||||
_sink.writeList(typeParameters, _writeTypeParameterElement);
|
||||
f();
|
||||
} finally {
|
||||
_resolutionSink.localElements.popScope();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _writeUnitElement(CompilationUnitElement unitElement) {
|
||||
|
@ -745,9 +737,7 @@ class ResolutionSink extends _SummaryDataWriter {
|
|||
void Function() f, {
|
||||
required bool withAnnotations,
|
||||
}) {
|
||||
localElements.pushScope();
|
||||
localElements.declareAll(typeParameters);
|
||||
try {
|
||||
localElements.withElements(typeParameters, () {
|
||||
writeUInt30(typeParameters.length);
|
||||
for (var typeParameter in typeParameters) {
|
||||
_writeStringReference(typeParameter.name);
|
||||
|
@ -759,9 +749,7 @@ class ResolutionSink extends _SummaryDataWriter {
|
|||
}
|
||||
}
|
||||
f();
|
||||
} finally {
|
||||
localElements.popScope();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static List<DartType> _enclosingClassTypeArguments(
|
||||
|
@ -942,7 +930,6 @@ class _Library {
|
|||
|
||||
class _LocalElementIndexer {
|
||||
final Map<Element, int> _index = Map.identity();
|
||||
final List<int> _scopes = [];
|
||||
int _stackHeight = 0;
|
||||
|
||||
int operator [](Element element) {
|
||||
|
@ -950,22 +937,17 @@ class _LocalElementIndexer {
|
|||
(throw ArgumentError('Unexpectedly not indexed: $element'));
|
||||
}
|
||||
|
||||
void declare(Element element) {
|
||||
_index[element] = _stackHeight++;
|
||||
}
|
||||
|
||||
void declareAll(List<Element> elements) {
|
||||
void withElements(List<Element> elements, void Function() f) {
|
||||
for (var element in elements) {
|
||||
declare(element);
|
||||
_index[element] = _stackHeight++;
|
||||
}
|
||||
}
|
||||
|
||||
void popScope() {
|
||||
_stackHeight = _scopes.removeLast();
|
||||
}
|
||||
f();
|
||||
|
||||
void pushScope() {
|
||||
_scopes.add(_stackHeight);
|
||||
_stackHeight -= elements.length;
|
||||
for (var element in elements) {
|
||||
_index.remove(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue