mirror of
https://github.com/dart-lang/sdk
synced 2024-09-30 04:38:33 +00:00
Macro. Move updating types for GenericFunctionType and TypeParameter to declarations.
This saves us about 120 ms out of 2000. Change-Id: Ib352a78b39706b07fc2ee0d5b2c3e6e77d98119c Bug:https://github.com/dart-lang/sdk/issues/55784 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373000 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
452de7b098
commit
1b57d51908
|
@ -311,6 +311,7 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
|
|||
var nullabilitySuffix = _getNullabilitySuffix(node.question != null);
|
||||
var builder = FunctionTypeBuilder.of(nodeImpl, nullabilitySuffix);
|
||||
nodeImpl.type = builder;
|
||||
nodesToBuildType.addDeclaration(node);
|
||||
nodesToBuildType.addTypeBuilder(builder);
|
||||
|
||||
scope = outerScope;
|
||||
|
@ -514,6 +515,7 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
|
|||
bound.accept(this);
|
||||
var element = node.declaredElement as TypeParameterElementImpl;
|
||||
element.bound = bound.type;
|
||||
nodesToBuildType.addDeclaration(node);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -87,17 +87,6 @@ class TypesBuilder {
|
|||
builder.build();
|
||||
}
|
||||
|
||||
// TODO(scheglov): generalize
|
||||
_linker.elementNodes.forEach((element, node) {
|
||||
if (element is GenericFunctionTypeElementImpl &&
|
||||
node is GenericFunctionType) {
|
||||
element.returnType = node.returnType?.type ?? _dynamicType;
|
||||
}
|
||||
if (element is TypeParameterElementImpl && node is TypeParameter) {
|
||||
element.bound = node.bound?.type;
|
||||
}
|
||||
});
|
||||
|
||||
for (var declaration in nodes.declarations) {
|
||||
_declaration(declaration);
|
||||
}
|
||||
|
@ -191,6 +180,8 @@ class TypesBuilder {
|
|||
_functionTypeAlias(node);
|
||||
} else if (node is FunctionTypedFormalParameter) {
|
||||
_functionTypedFormalParameter(node);
|
||||
} else if (node is GenericFunctionTypeImpl) {
|
||||
_genericFunctionType(node);
|
||||
} else if (node is GenericTypeAlias) {
|
||||
_genericTypeAlias(node);
|
||||
} else if (node is MethodDeclaration) {
|
||||
|
@ -213,6 +204,8 @@ class TypesBuilder {
|
|||
element.type = node.type?.type ?? _dynamicType;
|
||||
} else if (node is SuperFormalParameter) {
|
||||
_superFormalParameter(node);
|
||||
} else if (node is TypeParameterImpl) {
|
||||
_typeParameter(node);
|
||||
} else if (node is VariableDeclarationList) {
|
||||
var type = node.type?.type;
|
||||
if (type != null) {
|
||||
|
@ -289,6 +282,11 @@ class TypesBuilder {
|
|||
element.type = type;
|
||||
}
|
||||
|
||||
void _genericFunctionType(GenericFunctionTypeImpl node) {
|
||||
var element = node.declaredElement!;
|
||||
element.returnType = node.returnType?.type ?? _dynamicType;
|
||||
}
|
||||
|
||||
void _genericTypeAlias(GenericTypeAlias node) {
|
||||
var element = node.declaredElement as TypeAliasElementImpl;
|
||||
var featureSet = element.library.featureSet;
|
||||
|
@ -342,6 +340,11 @@ class TypesBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
void _typeParameter(TypeParameterImpl node) {
|
||||
var element = node.declaredElement!;
|
||||
element.bound = node.bound?.type;
|
||||
}
|
||||
|
||||
List<TypeParameterElement> _typeParameters(TypeParameterList? node) {
|
||||
if (node == null) {
|
||||
return const <TypeParameterElement>[];
|
||||
|
|
Loading…
Reference in a new issue