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

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

Issue 177963002: Use List instead of Link in the type system. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address 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 unified diff | Download patch | Annotate | Revision Log
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 part of resolution; 5 part of resolution;
6 6
7 /** 7 /**
8 * [SignatureResolver] resolves function signatures. 8 * [SignatureResolver] resolves function signatures.
9 */ 9 */
10 class SignatureResolver extends MappingVisitor<ParameterElementX> { 10 class SignatureResolver extends MappingVisitor<ParameterElementX> {
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // If there are no formal parameters, we already reported an error above. 293 // If there are no formal parameters, we already reported an error above.
294 if (formalParameters != null) { 294 if (formalParameters != null) {
295 compiler.reportError(formalParameters, 295 compiler.reportError(formalParameters,
296 MessageKind.ILLEGAL_SETTER_FORMALS); 296 MessageKind.ILLEGAL_SETTER_FORMALS);
297 } 297 }
298 } 298 }
299 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); 299 LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
300 for (ParameterElement parameter in parameters) { 300 for (ParameterElement parameter in parameters) {
301 parameterTypes.addLast(parameter.type); 301 parameterTypes.addLast(parameter.type);
302 } 302 }
303 Link<DartType> optionalParameterTypes = const Link<DartType>(); 303 List<DartType> optionalParameterTypes = const <DartType>[];
304 Link<String> namedParameters = const Link<String>(); 304 List<String> namedParameters = const <String>[];
305 Link<DartType> namedParameterTypes = const Link<DartType>(); 305 List<DartType> namedParameterTypes = const <DartType>[];
306 List<Element> orderedOptionalParameters = 306 List<Element> orderedOptionalParameters =
307 visitor.optionalParameters.toList(); 307 visitor.optionalParameters.toList();
308 if (visitor.optionalParametersAreNamed) { 308 if (visitor.optionalParametersAreNamed) {
309 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
309 orderedOptionalParameters.sort((Element a, Element b) { 310 orderedOptionalParameters.sort((Element a, Element b) {
310 return a.name.compareTo(b.name); 311 return a.name.compareTo(b.name);
311 }); 312 });
312 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>(); 313 LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>();
313 LinkBuilder<DartType> namedParameterTypesBuilder = 314 LinkBuilder<DartType> namedParameterTypesBuilder =
314 new LinkBuilder<DartType>(); 315 new LinkBuilder<DartType>();
315 for (ParameterElement parameter in orderedOptionalParameters) { 316 for (ParameterElement parameter in orderedOptionalParameters) {
316 namedParametersBuilder.addLast(parameter.name); 317 namedParametersBuilder.addLast(parameter.name);
317 namedParameterTypesBuilder.addLast(parameter.type); 318 namedParameterTypesBuilder.addLast(parameter.type);
318 } 319 }
319 namedParameters = namedParametersBuilder.toLink(); 320 namedParameters = namedParametersBuilder.toLink().toList(growable: false);
320 namedParameterTypes = namedParameterTypesBuilder.toLink(); 321 namedParameterTypes = namedParameterTypesBuilder.toLink()
322 .toList(growable: false);
321 } else { 323 } else {
324 // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
322 LinkBuilder<DartType> optionalParameterTypesBuilder = 325 LinkBuilder<DartType> optionalParameterTypesBuilder =
323 new LinkBuilder<DartType>(); 326 new LinkBuilder<DartType>();
324 for (ParameterElement parameter in visitor.optionalParameters) { 327 for (ParameterElement parameter in visitor.optionalParameters) {
325 optionalParameterTypesBuilder.addLast(parameter.type); 328 optionalParameterTypesBuilder.addLast(parameter.type);
326 } 329 }
327 optionalParameterTypes = optionalParameterTypesBuilder.toLink(); 330 optionalParameterTypes = optionalParameterTypesBuilder.toLink()
331 .toList(growable: false);
328 } 332 }
329 FunctionType type = new FunctionType( 333 FunctionType type = new FunctionType(
330 element.declaration, 334 element.declaration,
331 returnType, 335 returnType,
332 parameterTypes.toLink(), 336 parameterTypes.toLink().toList(growable: false),
333 optionalParameterTypes, 337 optionalParameterTypes,
334 namedParameters, 338 namedParameters,
335 namedParameterTypes); 339 namedParameterTypes);
336 return new FunctionSignatureX(parameters, 340 return new FunctionSignatureX(parameters,
337 visitor.optionalParameters, 341 visitor.optionalParameters,
338 requiredParameterCount, 342 requiredParameterCount,
339 visitor.optionalParameterCount, 343 visitor.optionalParameterCount,
340 visitor.optionalParametersAreNamed, 344 visitor.optionalParametersAreNamed,
341 orderedOptionalParameters, 345 orderedOptionalParameters,
342 type); 346 type);
343 } 347 }
344 348
345 DartType resolveTypeAnnotation(TypeAnnotation annotation) { 349 DartType resolveTypeAnnotation(TypeAnnotation annotation) {
346 DartType type = resolveReturnType(annotation); 350 DartType type = resolveReturnType(annotation);
347 if (type.isVoid) { 351 if (type.isVoid) {
348 compiler.reportError(annotation, MessageKind.VOID_NOT_ALLOWED); 352 compiler.reportError(annotation, MessageKind.VOID_NOT_ALLOWED);
349 } 353 }
350 return type; 354 return type;
351 } 355 }
352 356
353 DartType resolveReturnType(TypeAnnotation annotation) { 357 DartType resolveReturnType(TypeAnnotation annotation) {
354 if (annotation == null) return const DynamicType(); 358 if (annotation == null) return const DynamicType();
355 DartType result = resolver.resolveTypeAnnotation(annotation); 359 DartType result = resolver.resolveTypeAnnotation(annotation);
356 if (result == null) { 360 if (result == null) {
357 return const DynamicType(); 361 return const DynamicType();
358 } 362 }
359 return result; 363 return result;
360 } 364 }
361 } 365 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698