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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart

Issue 2682333004: Remove convertConstructors. (Closed)
Patch Set: Long line. Created 3 years, 10 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 fasta.kernel_library_builder; 5 library fasta.kernel_library_builder;
6 6
7 import 'package:kernel/ast.dart'; 7 import 'package:kernel/ast.dart';
8 8
9 import 'package:kernel/clone.dart' show 9 import 'package:kernel/clone.dart' show
10 CloneVisitor; 10 CloneVisitor;
11 11
12 import '../errors.dart' show 12 import '../errors.dart' show
13 internalError; 13 internalError;
14 14
15 import '../loader.dart' show 15 import '../loader.dart' show
16 Loader; 16 Loader;
17 17
18 import '../modifier.dart' show 18 import '../modifier.dart' show
19 abstractMask,
19 staticMask; 20 staticMask;
20 21
21 import '../source/source_library_builder.dart' show 22 import '../source/source_library_builder.dart' show
23 DeclarationBuilder,
22 SourceLibraryBuilder; 24 SourceLibraryBuilder;
23 25
24 import '../source/source_class_builder.dart' show 26 import '../source/source_class_builder.dart' show
25 SourceClassBuilder; 27 SourceClassBuilder;
26 28
27 import '../util/relativize.dart' show 29 import '../util/relativize.dart' show
28 relativizeUri; 30 relativizeUri;
29 31
30 import 'kernel_builder.dart' show 32 import 'kernel_builder.dart' show
31 Builder, 33 Builder,
32 ClassBuilder, 34 ClassBuilder,
33 ConstructorReferenceBuilder, 35 ConstructorReferenceBuilder,
34 DynamicTypeBuilder, 36 DynamicTypeBuilder,
35 FormalParameterBuilder, 37 FormalParameterBuilder,
36 FunctionTypeAliasBuilder, 38 FunctionTypeAliasBuilder,
39 KernelConstructorBuilder,
37 KernelEnumBuilder, 40 KernelEnumBuilder,
38 KernelFieldBuilder, 41 KernelFieldBuilder,
39 KernelFormalParameterBuilder, 42 KernelFormalParameterBuilder,
40 KernelFunctionTypeAliasBuilder, 43 KernelFunctionTypeAliasBuilder,
41 KernelInvalidTypeBuilder, 44 KernelInvalidTypeBuilder,
42 KernelMixinApplicationBuilder, 45 KernelMixinApplicationBuilder,
43 KernelNamedMixinApplicationBuilder, 46 KernelNamedMixinApplicationBuilder,
44 KernelNamedTypeBuilder, 47 KernelNamedTypeBuilder,
45 KernelProcedureBuilder, 48 KernelProcedureBuilder,
46 KernelTypeBuilder, 49 KernelTypeBuilder,
47 KernelTypeVariableBuilder, 50 KernelTypeVariableBuilder,
48 MemberBuilder, 51 MemberBuilder,
49 MetadataBuilder, 52 MetadataBuilder,
50 MixedAccessor, 53 MixedAccessor,
51 NamedMixinApplicationBuilder, 54 NamedMixinApplicationBuilder,
52 PrefixBuilder, 55 PrefixBuilder,
56 ProcedureBuilder,
57 TypeBuilder,
53 TypeVariableBuilder; 58 TypeVariableBuilder;
54 59
55 class KernelLibraryBuilder 60 class KernelLibraryBuilder
56 extends SourceLibraryBuilder<KernelTypeBuilder, Library> { 61 extends SourceLibraryBuilder<KernelTypeBuilder, Library> {
57 final Library library; 62 final Library library;
58 63
59 final List<Class> mixinApplicationClasses = <Class>[]; 64 final List<Class> mixinApplicationClasses = <Class>[];
60 65
61 final List<List> argumentsWithMissingDefaultValues = <List>[]; 66 final List<List> argumentsWithMissingDefaultValues = <List>[];
62 67
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 new List<ConstructorReferenceBuilder>.from(constructorReferences), 104 new List<ConstructorReferenceBuilder>.from(constructorReferences),
100 charOffset); 105 charOffset);
101 constructorReferences.clear(); 106 constructorReferences.clear();
102 classMembers.forEach((String name, MemberBuilder builder) { 107 classMembers.forEach((String name, MemberBuilder builder) {
103 while (builder != null) { 108 while (builder != null) {
104 builder.parent = cls; 109 builder.parent = cls;
105 builder = builder.next; 110 builder = builder.next;
106 } 111 }
107 }); 112 });
108 // Nested declaration began in `OutlineBuilder.beginClassDeclaration`. 113 // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
109 endNestedDeclaration().resolveTypes(typeVariables); 114 endNestedDeclaration().resolveTypes(typeVariables, this);
110 addBuilder(className, cls, charOffset); 115 addBuilder(className, cls, charOffset);
111 } 116 }
112 117
113 void addNamedMixinApplication( 118 void addNamedMixinApplication(
114 List<MetadataBuilder> metadata, String name, 119 List<MetadataBuilder> metadata, String name,
115 List<TypeVariableBuilder> typeVariables, int modifiers, 120 List<TypeVariableBuilder> typeVariables, int modifiers,
116 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces, 121 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces,
117 int charOffset) { 122 int charOffset) {
118 NamedMixinApplicationBuilder builder = 123 NamedMixinApplicationBuilder builder =
119 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables, 124 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables,
120 modifiers, mixinApplication, interfaces, this, charOffset); 125 modifiers, mixinApplication, interfaces, this, charOffset);
121 // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`. 126 // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
122 endNestedDeclaration().resolveTypes(typeVariables); 127 endNestedDeclaration().resolveTypes(typeVariables, this);
123 addBuilder(name, builder, charOffset); 128 addBuilder(name, builder, charOffset);
124 } 129 }
125 130
126 void addField(List<MetadataBuilder> metadata, 131 void addField(List<MetadataBuilder> metadata,
127 int modifiers, KernelTypeBuilder type, String name, int charOffset) { 132 int modifiers, KernelTypeBuilder type, String name, int charOffset) {
128 addBuilder(name, new KernelFieldBuilder( 133 addBuilder(name, new KernelFieldBuilder(
129 metadata, type, name, modifiers, this, charOffset), charOffset); 134 metadata, type, name, modifiers, this, charOffset), charOffset);
130 } 135 }
131 136
132 void addProcedure(List<MetadataBuilder> metadata, 137 void addProcedure(List<MetadataBuilder> metadata,
133 int modifiers, KernelTypeBuilder returnType, String name, 138 int modifiers, KernelTypeBuilder returnType, String name,
134 List<TypeVariableBuilder> typeVariables, 139 List<TypeVariableBuilder> typeVariables,
135 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, 140 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier,
136 ProcedureKind kind, int charOffset, {bool isTopLevel}) { 141 ProcedureKind kind, int charOffset, {bool isTopLevel}) {
137 // Nested declaration began in `OutlineBuilder.beginMethod` or 142 // Nested declaration began in `OutlineBuilder.beginMethod` or
138 // `OutlineBuilder.beginTopLevelMethod`. 143 // `OutlineBuilder.beginTopLevelMethod`.
139 endNestedDeclaration().resolveTypes(typeVariables); 144 endNestedDeclaration().resolveTypes(typeVariables, this);
140 addBuilder(name, 145 ProcedureBuilder procedure;
141 new KernelProcedureBuilder(metadata, modifiers, returnType, name, 146 if (!isTopLevel && isConstructorName(name, currentDeclaration.name)) {
142 typeVariables, formals, asyncModifier, kind, this, charOffset), 147 int index = name.indexOf(".");
143 charOffset); 148 name = index == -1 ? "" : name.substring(index + 1);
149 procedure = new KernelConstructorBuilder(metadata,
150 modifiers & ~abstractMask, returnType, name, typeVariables, formals,
151 this, charOffset);
152 } else {
153 procedure = new KernelProcedureBuilder(metadata, modifiers, returnType,
154 name, typeVariables, formals, asyncModifier, kind, this, charOffset);
155 }
156 addBuilder(name, procedure, charOffset);
144 } 157 }
145 158
146 void addFactoryMethod(List<MetadataBuilder> metadata, 159 void addFactoryMethod(List<MetadataBuilder> metadata,
147 ConstructorReferenceBuilder constructorName, 160 ConstructorReferenceBuilder constructorName,
148 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, 161 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier,
149 ConstructorReferenceBuilder redirectionTarget, int charOffset) { 162 ConstructorReferenceBuilder redirectionTarget, int charOffset) {
150 // Nested declaration began in `OutlineBuilder.beginFactoryMethod`. 163 // Nested declaration began in `OutlineBuilder.beginFactoryMethod`.
151 endNestedDeclaration().resolveTypes(null); 164 DeclarationBuilder<KernelTypeBuilder> factoryDeclaration =
165 endNestedDeclaration();
152 String name = constructorName.name; 166 String name = constructorName.name;
167 int index = name.indexOf(".");
168 name = index == -1 ? "" : name.substring(index + 1);
153 assert(constructorName.suffix == null); 169 assert(constructorName.suffix == null);
154 addBuilder(name, 170 KernelProcedureBuilder procedure = new KernelProcedureBuilder(metadata,
155 new KernelProcedureBuilder(metadata, staticMask, null, name, null, 171 staticMask, null, name, <TypeVariableBuilder>[], formals, asyncModifier,
156 formals, asyncModifier, ProcedureKind.Factory, this, charOffset, 172 ProcedureKind.Factory, this, charOffset, redirectionTarget);
157 redirectionTarget), charOffset); 173 currentDeclaration.addFactoryDeclaration(procedure, factoryDeclaration);
174 addBuilder(name, procedure, charOffset);
158 } 175 }
159 176
160 void addEnum(List<MetadataBuilder> metadata, String name, 177 void addEnum(List<MetadataBuilder> metadata, String name,
161 List<String> constants, int charOffset) { 178 List<String> constants, int charOffset) {
162 addBuilder(name, 179 addBuilder(name,
163 new KernelEnumBuilder(metadata, name, constants, this, charOffset), 180 new KernelEnumBuilder(metadata, name, constants, this, charOffset),
164 charOffset); 181 charOffset);
165 } 182 }
166 183
167 void addFunctionTypeAlias(List<MetadataBuilder> metadata, 184 void addFunctionTypeAlias(List<MetadataBuilder> metadata,
168 KernelTypeBuilder returnType, String name, 185 KernelTypeBuilder returnType, String name,
169 List<TypeVariableBuilder> typeVariables, 186 List<TypeVariableBuilder> typeVariables,
170 List<FormalParameterBuilder> formals, int charOffset) { 187 List<FormalParameterBuilder> formals, int charOffset) {
171 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder( 188 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder(
172 metadata, returnType, name, typeVariables, formals, this, charOffset); 189 metadata, returnType, name, typeVariables, formals, this, charOffset);
173 // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`. 190 // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`.
174 endNestedDeclaration().resolveTypes(typeVariables); 191 endNestedDeclaration().resolveTypes(typeVariables, this);
175 addBuilder(name, typedef, charOffset); 192 addBuilder(name, typedef, charOffset);
176 } 193 }
177 194
178 KernelFormalParameterBuilder addFormalParameter( 195 KernelFormalParameterBuilder addFormalParameter(
179 List<MetadataBuilder> metadata, int modifiers, 196 List<MetadataBuilder> metadata, int modifiers,
180 KernelTypeBuilder type, String name, bool hasThis, int charOffset) { 197 KernelTypeBuilder type, String name, bool hasThis, int charOffset) {
181 return new KernelFormalParameterBuilder( 198 return new KernelFormalParameterBuilder(
182 metadata, modifiers, type, name, hasThis, this, charOffset); 199 metadata, modifiers, type, name, hasThis, this, charOffset);
183 } 200 }
184 201
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 } 296 }
280 } 297 }
281 expression.value = 298 expression.value =
282 defaultArgumentFrom(names[expression.name].initializer) 299 defaultArgumentFrom(names[expression.name].initializer)
283 ..parent = expression; 300 ..parent = expression;
284 } 301 }
285 } 302 }
286 } 303 }
287 return argumentsWithMissingDefaultValues.length; 304 return argumentsWithMissingDefaultValues.length;
288 } 305 }
306
307 List<TypeVariableBuilder> copyTypeVariables(
308 List<TypeVariableBuilder> original) {
309 List<TypeVariableBuilder> copy = <TypeVariableBuilder>[];
310 for (KernelTypeVariableBuilder variable in original) {
311 var newVariable = new KernelTypeVariableBuilder(
Johnni Winther 2017/02/13 09:50:35 Add directly to [copy] and avoid the variable?
ahe 2017/02/13 14:58:53 I'd like to keep it as is, as [copy] needs to be a
312 variable.name, this, variable.charOffset);
313 copy.add(newVariable);
314 }
315 Map<TypeVariableBuilder, TypeBuilder> substitution =
316 <TypeVariableBuilder, TypeBuilder>{};
317 int i = 0;
318 for (KernelTypeVariableBuilder variable in original) {
319 substitution[variable] = copy[i++].asTypeBuilder();
320 }
321 i = 0;
322 for (KernelTypeVariableBuilder variable in original) {
323 copy[i++].bound = variable.bound?.subst(substitution);
324 }
325 return copy;
326 }
289 } 327 }
328
329 bool isConstructorName(String name, String className) {
330 if (name.startsWith(className)) {
331 if (name.length == className.length) return true;
332 if (name.startsWith(".", className.length)) return true;
333 }
334 return false;
335 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698