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

Side by Side Diff: pkg/compiler/lib/src/resolution/signatures.dart

Issue 2627343004: Revert "Add support for the new function-type syntax." (Closed)
Patch Set: Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.resolution.signatures; 5 library dart2js.resolution.signatures;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart'; 8 import '../common/resolution.dart';
9 import '../elements/resolution_types.dart'; 9 import '../elements/resolution_types.dart';
10 import '../elements/elements.dart'; 10 import '../elements/elements.dart';
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 reporter.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_CONST); 87 reporter.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_CONST);
88 } 88 }
89 if (node.modifiers.isStatic) { 89 if (node.modifiers.isStatic) {
90 reporter.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_STATIC); 90 reporter.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_STATIC);
91 } 91 }
92 92
93 if (currentDefinitions != null) { 93 if (currentDefinitions != null) {
94 reporter.internalError(node, 'function type parameters not supported'); 94 reporter.internalError(node, 'function type parameters not supported');
95 } 95 }
96 currentDefinitions = node; 96 currentDefinitions = node;
97 FormalElementX element = definition == null 97 FormalElementX element = definition.accept(this);
98 ? createUnnamedParameter() // This happens in function types.
99 : definition.accept(this);
100 if (currentDefinitions.metadata != null) { 98 if (currentDefinitions.metadata != null) {
101 element.metadataInternal = 99 element.metadataInternal =
102 resolution.resolver.resolveMetadata(element, node); 100 resolution.resolver.resolveMetadata(element, node);
103 } 101 }
104 currentDefinitions = null; 102 currentDefinitions = null;
105 return element; 103 return element;
106 } 104 }
107 105
108 void validateName(Identifier node) { 106 void validateName(Identifier node) {
109 if (isOptionalParameter && 107 if (isOptionalParameter &&
110 optionalParametersAreNamed && 108 optionalParametersAreNamed &&
111 Name.isPrivateName(node.source)) { 109 Name.isPrivateName(node.source)) {
112 reporter.reportErrorMessage(node, MessageKind.PRIVATE_NAMED_PARAMETER); 110 reporter.reportErrorMessage(node, MessageKind.PRIVATE_NAMED_PARAMETER);
113 } 111 }
114 } 112 }
115 113
116 void computeParameterType(FormalElementX element, 114 void computeParameterType(FormalElementX element,
117 [VariableElement fieldElement]) { 115 [VariableElement fieldElement]) {
118 // Function-type as in `foo(int bar(String x))` 116 void computeFunctionType(FunctionExpression functionExpression) {
119 void computeInlineFunctionType(FunctionExpression functionExpression) {
120 FunctionSignature functionSignature = SignatureResolver.analyze( 117 FunctionSignature functionSignature = SignatureResolver.analyze(
121 resolution, 118 resolution,
122 scope, 119 scope,
123 functionExpression.typeVariables, 120 functionExpression.typeVariables,
124 functionExpression.parameters, 121 functionExpression.parameters,
125 functionExpression.returnType, 122 functionExpression.returnType,
126 element, 123 element,
127 registry, 124 registry,
128 defaultValuesError: MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT); 125 defaultValuesError: MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT);
129 element.functionSignature = functionSignature; 126 element.functionSignature = functionSignature;
130 } 127 }
131 128
132 if (currentDefinitions.type != null) { 129 if (currentDefinitions.type != null) {
133 element.typeCache = resolveTypeAnnotation(currentDefinitions.type); 130 element.typeCache = resolveTypeAnnotation(currentDefinitions.type);
134 } else { 131 } else {
135 // Is node.definitions exactly one FunctionExpression? 132 // Is node.definitions exactly one FunctionExpression?
136 Link<Node> link = currentDefinitions.definitions.nodes; 133 Link<Node> link = currentDefinitions.definitions.nodes;
137 assert(invariant(currentDefinitions, !link.isEmpty)); 134 assert(invariant(currentDefinitions, !link.isEmpty));
138 assert(invariant(currentDefinitions, link.tail.isEmpty)); 135 assert(invariant(currentDefinitions, link.tail.isEmpty));
139 if (link.head.asFunctionExpression() != null) { 136 if (link.head.asFunctionExpression() != null) {
140 // Inline function typed parameter, like `void m(int f(String s))`. 137 // Inline function typed parameter, like `void m(int f(String s))`.
141 computeInlineFunctionType(link.head); 138 computeFunctionType(link.head);
142 } else if (link.head.asSend() != null && 139 } else if (link.head.asSend() != null &&
143 link.head.asSend().selector.asFunctionExpression() != null) { 140 link.head.asSend().selector.asFunctionExpression() != null) {
144 // Inline function typed initializing formal or 141 // Inline function typed initializing formal or
145 // parameter with default value, like `C(int this.f(String s))` or 142 // parameter with default value, like `C(int this.f(String s))` or
146 // `void m([int f(String s) = null])`. 143 // `void m([int f(String s) = null])`.
147 computeInlineFunctionType( 144 computeFunctionType(link.head.asSend().selector.asFunctionExpression());
148 link.head.asSend().selector.asFunctionExpression());
149 } else { 145 } else {
150 assert(invariant(currentDefinitions, 146 assert(invariant(currentDefinitions,
151 link.head.asIdentifier() != null || link.head.asSend() != null)); 147 link.head.asIdentifier() != null || link.head.asSend() != null));
152 if (fieldElement != null) { 148 if (fieldElement != null) {
153 element.typeCache = fieldElement.computeType(resolution); 149 element.typeCache = fieldElement.computeType(resolution);
154 } else { 150 } else {
155 element.typeCache = const ResolutionDynamicType(); 151 element.typeCache = const ResolutionDynamicType();
156 } 152 }
157 } 153 }
158 } 154 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 enclosingElement, currentDefinitions, name, initializer, 191 enclosingElement, currentDefinitions, name, initializer,
196 isOptional: isOptionalParameter, isNamed: optionalParametersAreNamed); 192 isOptional: isOptionalParameter, isNamed: optionalParametersAreNamed);
197 } else { 193 } else {
198 parameter = new FormalElementX( 194 parameter = new FormalElementX(
199 ElementKind.PARAMETER, enclosingElement, currentDefinitions, name); 195 ElementKind.PARAMETER, enclosingElement, currentDefinitions, name);
200 } 196 }
201 computeParameterType(parameter); 197 computeParameterType(parameter);
202 return parameter; 198 return parameter;
203 } 199 }
204 200
205 FormalElementX createUnnamedParameter() {
206 FormalElementX parameter;
207 assert(!createRealParameters);
208 parameter = new FormalElementX.unnamed(
209 ElementKind.PARAMETER, enclosingElement, currentDefinitions);
210 computeParameterType(parameter);
211 return parameter;
212 }
213
214 InitializingFormalElementX createFieldParameter( 201 InitializingFormalElementX createFieldParameter(
215 Send node, Expression initializer) { 202 Send node, Expression initializer) {
216 InitializingFormalElementX element; 203 InitializingFormalElementX element;
217 Identifier receiver = node.receiver.asIdentifier(); 204 Identifier receiver = node.receiver.asIdentifier();
218 if (receiver == null || !receiver.isThis()) { 205 if (receiver == null || !receiver.isThis()) {
219 reporter.reportErrorMessage(node, MessageKind.INVALID_PARAMETER); 206 reporter.reportErrorMessage(node, MessageKind.INVALID_PARAMETER);
220 return new ErroneousInitializingFormalElementX( 207 return new ErroneousInitializingFormalElementX(
221 getParameterName(node), enclosingElement); 208 getParameterName(node), enclosingElement);
222 } else { 209 } else {
223 if (!enclosingElement.isGenerativeConstructor) { 210 if (!enclosingElement.isGenerativeConstructor) {
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 for (FormalElement parameter in parameters) { 414 for (FormalElement parameter in parameters) {
428 parameterTypes.addLast(parameter.type); 415 parameterTypes.addLast(parameter.type);
429 } 416 }
430 List<ResolutionDartType> optionalParameterTypes = 417 List<ResolutionDartType> optionalParameterTypes =
431 const <ResolutionDartType>[]; 418 const <ResolutionDartType>[];
432 List<String> namedParameters = const <String>[]; 419 List<String> namedParameters = const <String>[];
433 List<ResolutionDartType> namedParameterTypes = const <ResolutionDartType>[]; 420 List<ResolutionDartType> namedParameterTypes = const <ResolutionDartType>[];
434 List<Element> orderedOptionalParameters = 421 List<Element> orderedOptionalParameters =
435 visitor.optionalParameters.toList(); 422 visitor.optionalParameters.toList();
436 if (visitor.optionalParametersAreNamed) { 423 if (visitor.optionalParametersAreNamed) {
437 // TODO(karlklose); replace when [visitor.optionalParameters] is a [List]. 424 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
438 orderedOptionalParameters.sort((Element a, Element b) { 425 orderedOptionalParameters.sort((Element a, Element b) {
439 return a.name.compareTo(b.name); 426 return a.name.compareTo(b.name);
440 }); 427 });
441 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>(); 428 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>();
442 LinkBuilder<ResolutionDartType> namedParameterTypesBuilder = 429 LinkBuilder<ResolutionDartType> namedParameterTypesBuilder =
443 new LinkBuilder<ResolutionDartType>(); 430 new LinkBuilder<ResolutionDartType>();
444 for (FormalElement parameter in orderedOptionalParameters) { 431 for (FormalElement parameter in orderedOptionalParameters) {
445 namedParametersBuilder.addLast(parameter.name); 432 namedParametersBuilder.addLast(parameter.name);
446 namedParameterTypesBuilder.addLast(parameter.type); 433 namedParameterTypesBuilder.addLast(parameter.type);
447 } 434 }
448 namedParameters = namedParametersBuilder.toLink().toList(growable: false); 435 namedParameters = namedParametersBuilder.toLink().toList(growable: false);
449 namedParameterTypes = 436 namedParameterTypes =
450 namedParameterTypesBuilder.toLink().toList(growable: false); 437 namedParameterTypesBuilder.toLink().toList(growable: false);
451 } else { 438 } else {
452 // TODO(karlklose); replace when [visitor.optionalParameters] is a [List]. 439 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
453 LinkBuilder<ResolutionDartType> optionalParameterTypesBuilder = 440 LinkBuilder<ResolutionDartType> optionalParameterTypesBuilder =
454 new LinkBuilder<ResolutionDartType>(); 441 new LinkBuilder<ResolutionDartType>();
455 for (FormalElement parameter in visitor.optionalParameters) { 442 for (FormalElement parameter in visitor.optionalParameters) {
456 optionalParameterTypesBuilder.addLast(parameter.type); 443 optionalParameterTypesBuilder.addLast(parameter.type);
457 } 444 }
458 optionalParameterTypes = 445 optionalParameterTypes =
459 optionalParameterTypesBuilder.toLink().toList(growable: false); 446 optionalParameterTypesBuilder.toLink().toList(growable: false);
460 } 447 }
461 ResolutionFunctionType type = new ResolutionFunctionType( 448 ResolutionFunctionType type = new ResolutionFunctionType(
462 element.declaration, 449 element.declaration,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 /// variables of the function signature itself when its signature is analyzed. 485 /// variables of the function signature itself when its signature is analyzed.
499 class FunctionSignatureBuildingScope extends TypeVariablesScope { 486 class FunctionSignatureBuildingScope extends TypeVariablesScope {
500 @override 487 @override
501 final List<ResolutionDartType> typeVariables; 488 final List<ResolutionDartType> typeVariables;
502 489
503 FunctionSignatureBuildingScope(Scope parent, this.typeVariables) 490 FunctionSignatureBuildingScope(Scope parent, this.typeVariables)
504 : super(parent); 491 : super(parent);
505 492
506 String toString() => 'FunctionSignatureBuildingScope($typeVariables)'; 493 String toString() => 'FunctionSignatureBuildingScope($typeVariables)';
507 } 494 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution_common.dart ('k') | pkg/compiler/lib/src/resolution/type_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698