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

Side by Side Diff: pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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 backend_ast_emitter; 5 library backend_ast_emitter;
6 6
7 import 'backend_ast_nodes.dart'; 7 import 'backend_ast_nodes.dart';
8 import '../dart_types.dart'; 8 import '../dart_types.dart';
9 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
10 10
11 class TypeGenerator { 11 class TypeGenerator {
12
13 /// TODO(johnniwinther): Remove this when issue 21283 has been resolved. 12 /// TODO(johnniwinther): Remove this when issue 21283 has been resolved.
14 static int pseudoNameCounter = 0; 13 static int pseudoNameCounter = 0;
15 14
16 static Parameter emitParameter(DartType type, 15 static Parameter emitParameter(DartType type,
17 {String name, 16 {String name, Element element}) {
18 Element element}) {
19 if (name == null && element != null) { 17 if (name == null && element != null) {
20 name = element.name; 18 name = element.name;
21 } 19 }
22 if (name == null) { 20 if (name == null) {
23 name = '_${pseudoNameCounter++}'; 21 name = '_${pseudoNameCounter++}';
24 } 22 }
25 Parameter parameter; 23 Parameter parameter;
26 if (type.isFunctionType) { 24 if (type.isFunctionType) {
27 FunctionType functionType = type; 25 FunctionType functionType = type;
28 TypeAnnotation returnType = createOptionalType(functionType.returnType); 26 TypeAnnotation returnType = createOptionalType(functionType.returnType);
29 Parameters innerParameters = 27 Parameters innerParameters = createParametersFromType(functionType);
30 createParametersFromType(functionType);
31 parameter = new Parameter.function(name, returnType, innerParameters); 28 parameter = new Parameter.function(name, returnType, innerParameters);
32 } else { 29 } else {
33 TypeAnnotation typeAnnotation = createOptionalType(type); 30 TypeAnnotation typeAnnotation = createOptionalType(type);
34 parameter = new Parameter(name, type: typeAnnotation); 31 parameter = new Parameter(name, type: typeAnnotation);
35 } 32 }
36 parameter.element = element; 33 parameter.element = element;
37 return parameter; 34 return parameter;
38 } 35 }
39 36
40 static Parameters createParametersFromType(FunctionType functionType) { 37 static Parameters createParametersFromType(FunctionType functionType) {
41 pseudoNameCounter = 0; 38 pseudoNameCounter = 0;
42 if (functionType.namedParameters.isEmpty) { 39 if (functionType.namedParameters.isEmpty) {
43 return new Parameters( 40 return new Parameters(createParameters(functionType.parameterTypes),
44 createParameters(functionType.parameterTypes), 41 createParameters(functionType.optionalParameterTypes), false);
45 createParameters(functionType.optionalParameterTypes),
46 false);
47 } else { 42 } else {
48 return new Parameters( 43 return new Parameters(
49 createParameters(functionType.parameterTypes), 44 createParameters(functionType.parameterTypes),
50 createParameters(functionType.namedParameterTypes, 45 createParameters(functionType.namedParameterTypes,
51 names: functionType.namedParameters), 46 names: functionType.namedParameters),
52 true); 47 true);
53 } 48 }
54 } 49 }
55 50
56 static List<Parameter> createParameters( 51 static List<Parameter> createParameters(Iterable<DartType> parameterTypes,
57 Iterable<DartType> parameterTypes,
58 {Iterable<String> names: const <String>[], 52 {Iterable<String> names: const <String>[],
59 Iterable<Element> elements: const <Element>[]}) { 53 Iterable<Element> elements: const <Element>[]}) {
60 Iterator<String> name = names.iterator; 54 Iterator<String> name = names.iterator;
61 Iterator<Element> element = elements.iterator; 55 Iterator<Element> element = elements.iterator;
62 return parameterTypes.map((DartType type) { 56 return parameterTypes.map((DartType type) {
63 name.moveNext(); 57 name.moveNext();
64 element.moveNext(); 58 element.moveNext();
65 return emitParameter(type, 59 return emitParameter(type, name: name.current, element: element.current);
66 name: name.current,
67 element: element.current);
68 }).toList(); 60 }).toList();
69 } 61 }
70 62
71 /// Like [createTypeAnnotation] except the dynamic type is converted to null. 63 /// Like [createTypeAnnotation] except the dynamic type is converted to null.
72 static TypeAnnotation createOptionalType(DartType type) { 64 static TypeAnnotation createOptionalType(DartType type) {
73 if (type.treatAsDynamic) { 65 if (type.treatAsDynamic) {
74 return null; 66 return null;
75 } else { 67 } else {
76 return createType(type); 68 return createType(type);
77 } 69 }
78 } 70 }
79 71
80 /// Creates the [TypeAnnotation] for a [type] that is not function type. 72 /// Creates the [TypeAnnotation] for a [type] that is not function type.
81 static TypeAnnotation createType(DartType type) { 73 static TypeAnnotation createType(DartType type) {
82 if (type is GenericType) { 74 if (type is GenericType) {
83 if (type.treatAsRaw) { 75 if (type.treatAsRaw) {
84 return new TypeAnnotation(type.element.name)..dartType = type; 76 return new TypeAnnotation(type.element.name)..dartType = type;
85 } 77 }
86 return new TypeAnnotation( 78 return new TypeAnnotation(type.element.name,
87 type.element.name, 79 type.typeArguments.map(createType).toList(growable: false))
88 type.typeArguments.map(createType).toList(growable:false)) 80 ..dartType = type;
89 ..dartType = type;
90 } else if (type is VoidType) { 81 } else if (type is VoidType) {
91 return new TypeAnnotation('void') 82 return new TypeAnnotation('void')..dartType = type;
92 ..dartType = type;
93 } else if (type is TypeVariableType) { 83 } else if (type is TypeVariableType) {
94 return new TypeAnnotation(type.name) 84 return new TypeAnnotation(type.name)..dartType = type;
95 ..dartType = type;
96 } else if (type is DynamicType) { 85 } else if (type is DynamicType) {
97 return new TypeAnnotation("dynamic") 86 return new TypeAnnotation("dynamic")..dartType = type;
98 ..dartType = type;
99 } else if (type is MalformedType) { 87 } else if (type is MalformedType) {
100 return new TypeAnnotation(type.name) 88 return new TypeAnnotation(type.name)..dartType = type;
101 ..dartType = type;
102 } else { 89 } else {
103 throw "Unsupported type annotation: $type"; 90 throw "Unsupported type annotation: $type";
104 } 91 }
105 } 92 }
106 } 93 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/dart_backend/backend.dart ('k') | pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698