Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(576)

Unified Diff: sdk/lib/_internal/compiler/implementation/resolution/signatures.dart

Issue 392873002: Element-model refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart b/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
index 97b9ec0aa0af85ca8f7d3dcc25de7d6efdcd71ee..08bb37fad28e118806c1cd5a71016bc2d8492b97 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/signatures.dart
@@ -7,11 +7,12 @@ part of resolution;
/**
* [SignatureResolver] resolves function signatures.
*/
-class SignatureResolver extends MappingVisitor<ParameterElementX> {
+class SignatureResolver extends MappingVisitor<FormalElementX> {
final ResolverVisitor resolver;
final FunctionTypedElement enclosingElement;
final Scope scope;
final MessageKind defaultValuesError;
+ final bool createRealParameters;
Link<Element> optionalParameters = const Link<Element>();
int optionalParameterCount = 0;
bool isOptionalParameter = false;
@@ -21,7 +22,8 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
SignatureResolver(Compiler compiler,
FunctionTypedElement enclosingElement,
ResolutionRegistry registry,
- {this.defaultValuesError})
+ {this.defaultValuesError,
+ this.createRealParameters})
: this.enclosingElement = enclosingElement,
this.scope = enclosingElement.buildScope(),
this.resolver =
@@ -43,7 +45,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
optionalParameters = elements.toLink();
}
- ParameterElementX visitVariableDefinitions(VariableDefinitions node) {
+ FormalElementX visitVariableDefinitions(VariableDefinitions node) {
Link<Node> definitions = node.definitions.nodes;
if (definitions.isEmpty) {
internalError(node, 'no parameter definition');
@@ -68,7 +70,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
internalError(node, 'function type parameters not supported');
}
currentDefinitions = node;
- ParameterElementX element = definition.accept(this);
+ FormalElementX element = definition.accept(this);
if (currentDefinitions.metadata != null) {
element.metadata = compiler.resolver.resolveMetadata(element, node);
}
@@ -85,7 +87,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
}
}
- void computeParameterType(ParameterElementX element,
+ void computeParameterType(FormalElementX element,
[VariableElement fieldElement]) {
void computeFunctionType(FunctionExpression functionExpression) {
FunctionSignature functionSignature = SignatureResolver.analyze(
@@ -149,22 +151,27 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
// The only valid [Send] can be in constructors and must be of the form
// [:this.x:] (where [:x:] represents an instance field).
- FieldParameterElementX visitSend(Send node) {
+ InitializingFormalElementX visitSend(Send node) {
return createFieldParameter(node, null);
}
- ParameterElementX createParameter(Identifier name, Expression initializer) {
+ FormalElementX createParameter(Identifier name, Expression initializer) {
validateName(name);
- ParameterElementX parameter = new ParameterElementX(
- ElementKind.PARAMETER, enclosingElement,
- currentDefinitions, name, initializer);
+ FormalElementX parameter;
+ if (createRealParameters) {
+ parameter = new LocalParameterElementX(
+ enclosingElement, currentDefinitions, name, initializer);
+ } else {
+ parameter = new FormalElementX(
+ ElementKind.PARAMETER, enclosingElement, currentDefinitions, name);
+ }
computeParameterType(parameter);
return parameter;
}
- FieldParameterElementX createFieldParameter(Send node,
- Expression initializer) {
- FieldParameterElementX element;
+ InitializingFormalElementX createFieldParameter(Send node,
+ Expression initializer) {
+ InitializingFormalElementX element;
if (node.receiver.asIdentifier() == null ||
!node.receiver.asIdentifier().isThis()) {
error(node, MessageKind.INVALID_PARAMETER);
@@ -182,7 +189,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
} else if (!fieldElement.isInstanceMember) {
error(node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
}
- element = new FieldParameterElementX(enclosingElement,
+ element = new InitializingFormalElementX(enclosingElement,
currentDefinitions, name, initializer, fieldElement);
computeParameterType(element, fieldElement);
}
@@ -191,7 +198,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
/// A [SendSet] node is an optional parameter with a default value.
Element visitSendSet(SendSet node) {
- ParameterElementX element;
+ FormalElementX element;
if (node.receiver != null) {
element = createFieldParameter(node, node.arguments.first);
} else if (node.selector.asIdentifier() != null ||
@@ -239,15 +246,21 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
/**
* Resolves formal parameters and return type of a [FunctionExpression]
* to a [FunctionSignature].
+ *
+ * If [createRealParameters] is `true`, the parameters will be
+ * real parameters implementing the [ParameterElement] interface. Otherwise,
+ * the parameters will only implement [FormalElement].
*/
static FunctionSignature analyze(Compiler compiler,
NodeList formalParameters,
Node returnNode,
FunctionTypedElement element,
ResolutionRegistry registry,
- {MessageKind defaultValuesError}) {
+ {MessageKind defaultValuesError,
+ bool createRealParameters: false}) {
SignatureResolver visitor = new SignatureResolver(compiler, element,
- registry, defaultValuesError: defaultValuesError);
+ registry, defaultValuesError: defaultValuesError,
+ createRealParameters: createRealParameters);
Link<Element> parameters = const Link<Element>();
int requiredParameterCount = 0;
if (formalParameters == null) {
@@ -297,7 +310,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
}
}
LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
- for (ParameterElement parameter in parameters) {
+ for (FormalElement parameter in parameters) {
parameterTypes.addLast(parameter.type);
}
List<DartType> optionalParameterTypes = const <DartType>[];
@@ -313,7 +326,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>();
LinkBuilder<DartType> namedParameterTypesBuilder =
new LinkBuilder<DartType>();
- for (ParameterElement parameter in orderedOptionalParameters) {
+ for (FormalElement parameter in orderedOptionalParameters) {
namedParametersBuilder.addLast(parameter.name);
namedParameterTypesBuilder.addLast(parameter.type);
}
@@ -324,7 +337,7 @@ class SignatureResolver extends MappingVisitor<ParameterElementX> {
// TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
LinkBuilder<DartType> optionalParameterTypesBuilder =
new LinkBuilder<DartType>();
- for (ParameterElement parameter in visitor.optionalParameters) {
+ for (FormalElement parameter in visitor.optionalParameters) {
optionalParameterTypesBuilder.addLast(parameter.type);
}
optionalParameterTypes = optionalParameterTypesBuilder.toLink()

Powered by Google App Engine
This is Rietveld 408576698