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

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

Issue 2691523002: Ensure locations are always provided, but don't store them yet. (Closed)
Patch Set: Address comments. 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 staticMask; 19 staticMask;
20 20
21 import '../source/source_library_builder.dart' show 21 import '../source/source_library_builder.dart' show
22 SourceLibraryBuilder; 22 SourceLibraryBuilder;
23 23
24 import '../source/source_class_builder.dart' show 24 import '../source/source_class_builder.dart' show
25 SourceClassBuilder; 25 SourceClassBuilder;
26 26
27 import '../util/relativize.dart' show
28 relativizeUri;
29
27 import 'kernel_builder.dart' show 30 import 'kernel_builder.dart' show
28 Builder, 31 Builder,
29 ClassBuilder, 32 ClassBuilder,
30 ConstructorReferenceBuilder, 33 ConstructorReferenceBuilder,
31 DynamicTypeBuilder, 34 DynamicTypeBuilder,
32 EnumBuilder, 35 EnumBuilder,
33 FieldBuilder, 36 FieldBuilder,
34 FormalParameterBuilder, 37 FormalParameterBuilder,
35 FunctionTypeAliasBuilder, 38 FunctionTypeAliasBuilder,
36 KernelEnumBuilder, 39 KernelEnumBuilder,
(...skipping 17 matching lines...) Expand all
54 57
55 class KernelLibraryBuilder 58 class KernelLibraryBuilder
56 extends SourceLibraryBuilder<KernelTypeBuilder, Library> { 59 extends SourceLibraryBuilder<KernelTypeBuilder, Library> {
57 final Library library; 60 final Library library;
58 61
59 final List<Class> mixinApplicationClasses = <Class>[]; 62 final List<Class> mixinApplicationClasses = <Class>[];
60 63
61 final List<List> argumentsWithMissingDefaultValues = <List>[]; 64 final List<List> argumentsWithMissingDefaultValues = <List>[];
62 65
63 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader) 66 KernelLibraryBuilder(Uri uri, Uri fileUri, Loader loader)
64 : library = new Library(uri), 67 : library = new Library(uri, fileUri: relativizeUri(fileUri)),
65 super(loader, fileUri); 68 super(loader, fileUri);
66 69
67 Uri get uri => library.importUri; 70 Uri get uri => library.importUri;
68 71
69 KernelTypeBuilder addNamedType(String name, 72 KernelTypeBuilder addNamedType(String name,
70 List<KernelTypeBuilder> arguments) { 73 List<KernelTypeBuilder> arguments, int charOffset) {
71 KernelNamedTypeBuilder type = 74 KernelNamedTypeBuilder type =
72 new KernelNamedTypeBuilder(name, arguments); 75 new KernelNamedTypeBuilder(name, arguments, charOffset, fileUri);
73 if (identical(name, "dynamic")) { 76 if (identical(name, "dynamic")) {
74 // TODO(ahe): Make const. 77 type.builder =
75 type.builder = new DynamicTypeBuilder(const DynamicType()); 78 new DynamicTypeBuilder(const DynamicType(), this, charOffset);
76 } else { 79 } else {
77 addType(type); 80 addType(type);
78 } 81 }
79 return type; 82 return type;
80 } 83 }
81 84
82 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype, 85 KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype,
83 List<KernelTypeBuilder> mixins) { 86 List<KernelTypeBuilder> mixins, int charOffset) {
84 KernelTypeBuilder type = 87 KernelTypeBuilder type = new KernelMixinApplicationBuilder(
85 new KernelMixinApplicationBuilder(supertype, mixins); 88 supertype, mixins, charOffset, fileUri);
86 return addType(type); 89 return addType(type);
87 } 90 }
88 91
89 KernelTypeBuilder addVoidType() { 92 KernelTypeBuilder addVoidType(int charOffset) {
90 return new KernelNamedTypeBuilder("void", null); 93 return new KernelNamedTypeBuilder("void", null, charOffset, fileUri);
91 } 94 }
92 95
93 ClassBuilder addClass(List<MetadataBuilder> metadata, 96 ClassBuilder addClass(List<MetadataBuilder> metadata,
94 int modifiers, String className, 97 int modifiers, String className,
95 List<TypeVariableBuilder> typeVariables, KernelTypeBuilder supertype, 98 List<TypeVariableBuilder> typeVariables, KernelTypeBuilder supertype,
96 List<KernelTypeBuilder> interfaces) { 99 List<KernelTypeBuilder> interfaces, int charOffset) {
97 ClassBuilder cls = new SourceClassBuilder(metadata, modifiers, className, 100 ClassBuilder cls = new SourceClassBuilder(metadata, modifiers, className,
98 typeVariables, supertype, interfaces, classMembers, declarationTypes, 101 typeVariables, supertype, interfaces, classMembers, declarationTypes,
99 this, 102 this,
100 new List<ConstructorReferenceBuilder>.from(constructorReferences)); 103 new List<ConstructorReferenceBuilder>.from(constructorReferences),
104 charOffset);
101 constructorReferences.clear(); 105 constructorReferences.clear();
102 classMembers.forEach((String name, MemberBuilder builder) { 106 classMembers.forEach((String name, MemberBuilder builder) {
103 while (builder != null) { 107 while (builder != null) {
104 builder.parent = cls; 108 builder.parent = cls;
105 builder = builder.next; 109 builder = builder.next;
106 } 110 }
107 }); 111 });
108 // Nested declaration began in `OutlineBuilder.beginClassDeclaration`. 112 // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
109 endNestedDeclaration(); 113 endNestedDeclaration();
110 return addBuilder(className, cls); 114 return addBuilder(className, cls);
111 } 115 }
112 116
113 NamedMixinApplicationBuilder addNamedMixinApplication( 117 NamedMixinApplicationBuilder addNamedMixinApplication(
114 List<MetadataBuilder> metadata, String name, 118 List<MetadataBuilder> metadata, String name,
115 List<TypeVariableBuilder> typeVariables, int modifiers, 119 List<TypeVariableBuilder> typeVariables, int modifiers,
116 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces) { 120 KernelTypeBuilder mixinApplication, List<KernelTypeBuilder> interfaces,
121 int charOffset) {
117 NamedMixinApplicationBuilder builder = 122 NamedMixinApplicationBuilder builder =
118 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables, 123 new KernelNamedMixinApplicationBuilder(metadata, name, typeVariables,
119 modifiers, mixinApplication, interfaces, declarationTypes, this); 124 modifiers, mixinApplication, interfaces, declarationTypes, this,
125 charOffset);
120 // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`. 126 // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
121 endNestedDeclaration(); 127 endNestedDeclaration();
122 return addBuilder(name, builder); 128 return addBuilder(name, builder);
123 } 129 }
124 130
125 FieldBuilder addField(List<MetadataBuilder> metadata, 131 FieldBuilder addField(List<MetadataBuilder> metadata,
126 int modifiers, KernelTypeBuilder type, String name) { 132 int modifiers, KernelTypeBuilder type, String name, int charOffset) {
127 return addBuilder(name, 133 return addBuilder(name, new KernelFieldBuilder(
128 new KernelFieldBuilder(metadata, type, name, modifiers)); 134 metadata, type, name, modifiers, this, charOffset));
129 } 135 }
130 136
131 ProcedureBuilder addProcedure(List<MetadataBuilder> metadata, 137 ProcedureBuilder addProcedure(List<MetadataBuilder> metadata,
132 int modifiers, KernelTypeBuilder returnType, String name, 138 int modifiers, KernelTypeBuilder returnType, String name,
133 List<TypeVariableBuilder> typeVariables, 139 List<TypeVariableBuilder> typeVariables,
134 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, 140 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier,
135 ProcedureKind kind) { 141 ProcedureKind kind, int charOffset) {
136 // Nested declaration began in `OutlineBuilder.beginMethod` or 142 // Nested declaration began in `OutlineBuilder.beginMethod` or
137 // `OutlineBuilder.beginTopLevelMethod`. 143 // `OutlineBuilder.beginTopLevelMethod`.
138 endNestedDeclaration().resolveTypes(typeVariables); 144 endNestedDeclaration().resolveTypes(typeVariables);
139 return addBuilder(name, 145 return addBuilder(name,
140 new KernelProcedureBuilder(metadata, modifiers, returnType, name, 146 new KernelProcedureBuilder(metadata, modifiers, returnType, name,
141 typeVariables, formals, asyncModifier, kind)); 147 typeVariables, formals, asyncModifier, kind, this, charOffset));
142 } 148 }
143 149
144 void addFactoryMethod(List<MetadataBuilder> metadata, 150 void addFactoryMethod(List<MetadataBuilder> metadata,
145 ConstructorReferenceBuilder constructorName, 151 ConstructorReferenceBuilder constructorName,
146 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier, 152 List<FormalParameterBuilder> formals, AsyncMarker asyncModifier,
147 ConstructorReferenceBuilder redirectionTarget) { 153 ConstructorReferenceBuilder redirectionTarget, int charOffset) {
148 String name = constructorName.name; 154 String name = constructorName.name;
149 assert(constructorName.suffix == null); 155 assert(constructorName.suffix == null);
150 addBuilder(name, 156 addBuilder(name,
151 new KernelProcedureBuilder(metadata, staticMask, null, name, null, 157 new KernelProcedureBuilder(metadata, staticMask, null, name, null,
152 formals, asyncModifier, ProcedureKind.Factory, redirectionTarget)); 158 formals, asyncModifier, ProcedureKind.Factory, this, charOffset,
159 redirectionTarget));
153 } 160 }
154 161
155 EnumBuilder addEnum(List<MetadataBuilder> metadata, String name, 162 EnumBuilder addEnum(List<MetadataBuilder> metadata, String name,
156 List<String> constants) { 163 List<String> constants, int charOffset) {
157 return addBuilder(name, 164 return addBuilder(name,
158 new KernelEnumBuilder(metadata, name, constants, this)); 165 new KernelEnumBuilder(metadata, name, constants, this, charOffset));
159 } 166 }
160 167
161 FunctionTypeAliasBuilder addFunctionTypeAlias(List<MetadataBuilder> metadata, 168 FunctionTypeAliasBuilder addFunctionTypeAlias(List<MetadataBuilder> metadata,
162 KernelTypeBuilder returnType, String name, 169 KernelTypeBuilder returnType, String name,
163 List<TypeVariableBuilder> typeVariables, 170 List<TypeVariableBuilder> typeVariables,
164 List<FormalParameterBuilder> formals) { 171 List<FormalParameterBuilder> formals, int charOffset) {
165 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder( 172 FunctionTypeAliasBuilder typedef = new KernelFunctionTypeAliasBuilder(
166 metadata, returnType, name, typeVariables, formals, declarationTypes, 173 metadata, returnType, name, typeVariables, formals, declarationTypes,
167 this); 174 this, charOffset);
168 // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`. 175 // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`.
169 endNestedDeclaration(); 176 endNestedDeclaration();
170 return addBuilder(name, typedef); 177 return addBuilder(name, typedef);
171 } 178 }
172 179
173 KernelFormalParameterBuilder addFormalParameter( 180 KernelFormalParameterBuilder addFormalParameter(
174 List<MetadataBuilder> metadata, int modifiers, 181 List<MetadataBuilder> metadata, int modifiers,
175 KernelTypeBuilder type, String name, bool hasThis) { 182 KernelTypeBuilder type, String name, bool hasThis, int charOffset) {
176 return new KernelFormalParameterBuilder( 183 return new KernelFormalParameterBuilder(
177 metadata, modifiers, type, name, hasThis); 184 metadata, modifiers, type, name, hasThis, this, charOffset);
178 } 185 }
179 186
180 KernelTypeVariableBuilder addTypeVariable(String name, 187 KernelTypeVariableBuilder addTypeVariable(String name,
181 KernelTypeBuilder bound) { 188 KernelTypeBuilder bound, int charOffset) {
182 return new KernelTypeVariableBuilder(name, bound); 189 return new KernelTypeVariableBuilder(name, this, charOffset, bound);
183 } 190 }
184 191
185 void buildBuilder(Builder builder) { 192 void buildBuilder(Builder builder) {
186 if (builder is SourceClassBuilder) { 193 if (builder is SourceClassBuilder) {
187 Class cls = builder.build(this); 194 Class cls = builder.build(this);
188 library.addClass(cls); 195 library.addClass(cls);
189 Class superclass = cls.superclass; 196 Class superclass = cls.superclass;
190 if (superclass != null && superclass.isMixinApplication) { 197 if (superclass != null && superclass.isMixinApplication) {
191 List<Class> mixinApplications = <Class>[]; 198 List<Class> mixinApplications = <Class>[];
192 mixinApplicationClasses.add(cls); 199 mixinApplicationClasses.add(cls);
(...skipping 26 matching lines...) Expand all
219 } 226 }
220 } 227 }
221 228
222 Library build() { 229 Library build() {
223 super.build(); 230 super.build();
224 library.name = name; 231 library.name = name;
225 return library; 232 return library;
226 } 233 }
227 234
228 Builder buildAmbiguousBuilder( 235 Builder buildAmbiguousBuilder(
229 String name, Builder builder, Builder other) { 236 String name, Builder builder, Builder other, int charOffset) {
230 if (builder.next == null && other.next == null) { 237 if (builder.next == null && other.next == null) {
231 if (builder.isGetter && other.isSetter) { 238 if (builder.isGetter && other.isSetter) {
232 return new MixedAccessor(builder, other); 239 return new MixedAccessor(builder, other, this);
233 } else if (builder.isSetter && other.isGetter) { 240 } else if (builder.isSetter && other.isGetter) {
234 return new MixedAccessor(other, builder); 241 return new MixedAccessor(other, builder, this);
235 } 242 }
236 } 243 }
237 return new KernelInvalidTypeBuilder(name, this); 244 return new KernelInvalidTypeBuilder(name, charOffset, fileUri);
238 } 245 }
239 246
240 void addArgumentsWithMissingDefaultValues(Arguments arguments, 247 void addArgumentsWithMissingDefaultValues(Arguments arguments,
241 FunctionNode function) { 248 FunctionNode function) {
242 assert(partOfLibrary == null); 249 assert(partOfLibrary == null);
243 argumentsWithMissingDefaultValues.add([arguments, function]); 250 argumentsWithMissingDefaultValues.add([arguments, function]);
244 } 251 }
245 252
246 int finishStaticInvocations() { 253 int finishStaticInvocations() {
247 CloneVisitor cloner; 254 CloneVisitor cloner;
(...skipping 27 matching lines...) Expand all
275 } 282 }
276 expression.value = 283 expression.value =
277 defaultArgumentFrom(names[expression.name].initializer) 284 defaultArgumentFrom(names[expression.name].initializer)
278 ..parent = expression; 285 ..parent = expression;
279 } 286 }
280 } 287 }
281 } 288 }
282 return argumentsWithMissingDefaultValues.length; 289 return argumentsWithMissingDefaultValues.length;
283 } 290 }
284 } 291 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698