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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/outline_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.outline_builder; 5 library fasta.outline_builder;
6 6
7 import 'package:kernel/ast.dart' show 7 import 'package:kernel/ast.dart' show
8 AsyncMarker, 8 AsyncMarker,
9 ProcedureKind; 9 ProcedureKind;
10 10
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 Uri get uri => library.uri; 88 Uri get uri => library.uri;
89 89
90 @override 90 @override
91 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { 91 void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
92 debugEvent("Metadata"); 92 debugEvent("Metadata");
93 List arguments = pop(); 93 List arguments = pop();
94 String postfix = popIfNotNull(periodBeforeName); 94 String postfix = popIfNotNull(periodBeforeName);
95 List<TypeBuilder> typeArguments = pop(); 95 List<TypeBuilder> typeArguments = pop();
96 if (arguments == null) { 96 if (arguments == null) {
97 String expression = pop(); 97 String expression = pop();
98 push(new MetadataBuilder.fromExpression(expression, postfix)); 98 push(new MetadataBuilder.fromExpression(expression, postfix, library,
99 beginToken.charOffset));
99 } else { 100 } else {
100 String typeName = pop(); 101 String typeName = pop();
101 push(new MetadataBuilder.fromConstructor( 102 push(new MetadataBuilder.fromConstructor(
102 library.addConstructorReference( 103 library.addConstructorReference(
103 typeName, typeArguments, postfix), arguments)); 104 typeName, typeArguments, postfix,
105 beginToken.next.charOffset),
106 arguments, library, beginToken.charOffset));
104 } 107 }
105 } 108 }
106 109
107 @override 110 @override
108 void endHide(Token hideKeyword) { 111 void endHide(Token hideKeyword) {
109 debugEvent("Hide"); 112 debugEvent("Hide");
110 List<String> names = pop(); 113 List<String> names = pop();
111 push(new Combinator.hide(names)); 114 push(new Combinator.hide(names, hideKeyword.charOffset, library.fileUri));
112 } 115 }
113 116
114 @override 117 @override
115 void endShow(Token showKeyword) { 118 void endShow(Token showKeyword) {
116 debugEvent("Show"); 119 debugEvent("Show");
117 List<String> names = pop(); 120 List<String> names = pop();
118 push(new Combinator.show(names)); 121 push(new Combinator.show(names, showKeyword.charOffset, library.fileUri));
119 } 122 }
120 123
121 @override 124 @override
122 void endCombinators(int count) { 125 void endCombinators(int count) {
123 debugEvent("Combinators"); 126 debugEvent("Combinators");
124 push(popList(count) ?? NullValue.Combinators); 127 push(popList(count) ?? NullValue.Combinators);
125 } 128 }
126 129
127 @override 130 @override
128 void endExport(Token exportKeyword, Token semicolon) { 131 void endExport(Token exportKeyword, Token semicolon) {
129 debugEvent("Export"); 132 debugEvent("Export");
130 List<Combinator> combinators = pop(); 133 List<Combinator> combinators = pop();
131 Unhandled conditionalUris = pop(); 134 Unhandled conditionalUris = pop();
132 String uri = pop(); 135 String uri = pop();
133 List<MetadataBuilder> metadata = pop(); 136 List<MetadataBuilder> metadata = pop();
134 library.addExport(metadata, uri, conditionalUris, combinators); 137 library.addExport(
138 metadata, uri, conditionalUris, combinators, exportKeyword.charOffset);
135 checkEmpty(); 139 checkEmpty();
136 } 140 }
137 141
138 @override 142 @override
139 void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword, 143 void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword,
140 Token semicolon) { 144 Token semicolon) {
141 debugEvent("endImport"); 145 debugEvent("endImport");
142 List<Combinator> combinators = pop(); 146 List<Combinator> combinators = pop();
143 String prefix = popIfNotNull(asKeyword); 147 String prefix = popIfNotNull(asKeyword);
144 Unhandled conditionalUris = pop(); 148 Unhandled conditionalUris = pop();
145 String uri = pop(); 149 String uri = pop();
146 List<MetadataBuilder> metadata = pop(); 150 List<MetadataBuilder> metadata = pop();
147 library.addImport(metadata, uri, conditionalUris, prefix, combinators, 151 library.addImport(metadata, uri, conditionalUris, prefix, combinators,
148 deferredKeyword != null); 152 deferredKeyword != null, importKeyword.charOffset,
153 asKeyword?.next?.charOffset ?? -1);
149 checkEmpty(); 154 checkEmpty();
150 } 155 }
151 156
152 @override 157 @override
153 void endPart(Token partKeyword, Token semicolon) { 158 void endPart(Token partKeyword, Token semicolon) {
154 debugEvent("Part"); 159 debugEvent("Part");
155 String uri = pop(); 160 String uri = pop();
156 List<MetadataBuilder> metadata = pop(); 161 List<MetadataBuilder> metadata = pop();
157 library.addPart(metadata, uri); 162 library.addPart(metadata, uri);
158 checkEmpty(); 163 checkEmpty();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 @override 200 @override
196 void endClassDeclaration(int interfacesCount, Token beginToken, 201 void endClassDeclaration(int interfacesCount, Token beginToken,
197 Token extendsKeyword, Token implementsKeyword, Token endToken) { 202 Token extendsKeyword, Token implementsKeyword, Token endToken) {
198 debugEvent("endClassDeclaration"); 203 debugEvent("endClassDeclaration");
199 List<TypeBuilder> interfaces = popList(interfacesCount); 204 List<TypeBuilder> interfaces = popList(interfacesCount);
200 TypeBuilder supertype = pop(); 205 TypeBuilder supertype = pop();
201 List<TypeVariableBuilder> typeVariables = pop(); 206 List<TypeVariableBuilder> typeVariables = pop();
202 String name = pop(); 207 String name = pop();
203 int modifiers = Modifier.validate(pop()); 208 int modifiers = Modifier.validate(pop());
204 List<MetadataBuilder> metadata = pop(); 209 List<MetadataBuilder> metadata = pop();
205 library.addClass( 210 library.addClass(metadata, modifiers, name, typeVariables, supertype,
206 metadata, modifiers, name, typeVariables, supertype, interfaces); 211 interfaces, beginToken.charOffset);
207 checkEmpty(); 212 checkEmpty();
208 } 213 }
209 214
210 ProcedureKind computeProcedureKind(Token token) { 215 ProcedureKind computeProcedureKind(Token token) {
211 if (token == null) return ProcedureKind.Method; 216 if (token == null) return ProcedureKind.Method;
212 if (optional("get", token)) return ProcedureKind.Getter; 217 if (optional("get", token)) return ProcedureKind.Getter;
213 if (optional("set", token)) return ProcedureKind.Setter; 218 if (optional("set", token)) return ProcedureKind.Setter;
214 return internalError("Unhandled: ${token.value}"); 219 return internalError("Unhandled: ${token.value}");
215 } 220 }
216 221
(...skipping 10 matching lines...) Expand all
227 AsyncMarker asyncModifier = pop(); 232 AsyncMarker asyncModifier = pop();
228 List<FormalParameterBuilder> formals = pop(); 233 List<FormalParameterBuilder> formals = pop();
229 List<TypeVariableBuilder> typeVariables = pop(); 234 List<TypeVariableBuilder> typeVariables = pop();
230 String name = pop(); 235 String name = pop();
231 TypeBuilder returnType = pop(); 236 TypeBuilder returnType = pop();
232 int modifiers = Modifier.validate(pop(), 237 int modifiers = Modifier.validate(pop(),
233 isAbstract: kind == MethodBody.Abstract); 238 isAbstract: kind == MethodBody.Abstract);
234 List<MetadataBuilder> metadata = pop(); 239 List<MetadataBuilder> metadata = pop();
235 checkEmpty(); 240 checkEmpty();
236 return library.addProcedure(metadata, modifiers, returnType, name, 241 return library.addProcedure(metadata, modifiers, returnType, name,
237 typeVariables, formals, asyncModifier, computeProcedureKind(getOrSet)); 242 typeVariables, formals, asyncModifier, computeProcedureKind(getOrSet),
243 beginToken.charOffset);
238 } 244 }
239 245
240 @override 246 @override
241 void handleNoFunctionBody(Token token) { 247 void handleNoFunctionBody(Token token) {
242 debugEvent("NoFunctionBody"); 248 debugEvent("NoFunctionBody");
243 push(MethodBody.Abstract); 249 push(MethodBody.Abstract);
244 } 250 }
245 251
246 @override 252 @override
247 void handleFunctionBodySkipped(Token token) { 253 void handleFunctionBodySkipped(Token token) {
(...skipping 28 matching lines...) Expand all
276 kind = ProcedureKind.Operator; 282 kind = ProcedureKind.Operator;
277 } else { 283 } else {
278 name = nameOrOperator; 284 name = nameOrOperator;
279 kind = computeProcedureKind(getOrSet); 285 kind = computeProcedureKind(getOrSet);
280 } 286 }
281 TypeBuilder returnType = pop(); 287 TypeBuilder returnType = pop();
282 int modifiers = Modifier.validate(pop(), 288 int modifiers = Modifier.validate(pop(),
283 isAbstract: bodyKind == MethodBody.Abstract); 289 isAbstract: bodyKind == MethodBody.Abstract);
284 List<MetadataBuilder> metadata = pop(); 290 List<MetadataBuilder> metadata = pop();
285 library.addProcedure(metadata, modifiers, returnType, name, typeVariables, 291 library.addProcedure(metadata, modifiers, returnType, name, typeVariables,
286 formals, asyncModifier, kind); 292 formals, asyncModifier, kind, beginToken.charOffset);
287 } 293 }
288 294
289 @override 295 @override
290 void endMixinApplication() { 296 void endMixinApplication() {
291 debugEvent("MixinApplication"); 297 debugEvent("MixinApplication");
292 List<TypeBuilder> mixins = pop(); 298 List<TypeBuilder> mixins = pop();
293 TypeBuilder supertype = pop(); 299 TypeBuilder supertype = pop();
294 push(library.addMixinApplication(supertype, mixins)); 300 push(library.addMixinApplication(supertype, mixins, -1));
295 } 301 }
296 302
297 @override 303 @override
298 void beginNamedMixinApplication(Token token) { 304 void beginNamedMixinApplication(Token token) {
299 library.beginNestedDeclaration(hasMembers: false); 305 library.beginNestedDeclaration(hasMembers: false);
300 } 306 }
301 307
302 @override 308 @override
303 void endNamedMixinApplication( 309 void endNamedMixinApplication(
304 Token classKeyword, Token implementsKeyword, Token endToken) { 310 Token classKeyword, Token implementsKeyword, Token endToken) {
305 debugEvent("endNamedMixinApplication"); 311 debugEvent("endNamedMixinApplication");
306 List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword); 312 List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword);
307 TypeBuilder mixinApplication = pop(); 313 TypeBuilder mixinApplication = pop();
308 List<TypeVariableBuilder> typeVariables = pop(); 314 List<TypeVariableBuilder> typeVariables = pop();
309 String name = pop(); 315 String name = pop();
310 int modifiers = Modifier.validate(pop()); 316 int modifiers = Modifier.validate(pop());
311 List<MetadataBuilder> metadata = pop(); 317 List<MetadataBuilder> metadata = pop();
312 library.addNamedMixinApplication( 318 library.addNamedMixinApplication(
313 metadata, name, typeVariables, modifiers, mixinApplication, interfaces); 319 metadata, name, typeVariables, modifiers, mixinApplication, interfaces,
320 classKeyword.charOffset);
314 checkEmpty(); 321 checkEmpty();
315 } 322 }
316 323
317 @override 324 @override
318 void endTypeArguments(int count, Token beginToken, Token endToken) { 325 void endTypeArguments(int count, Token beginToken, Token endToken) {
319 debugEvent("TypeArguments"); 326 debugEvent("TypeArguments");
320 push(popList(count) ?? NullValue.TypeArguments); 327 push(popList(count) ?? NullValue.TypeArguments);
321 } 328 }
322 329
323 @override 330 @override
324 void endType(Token beginToken, Token endToken) { 331 void endType(Token beginToken, Token endToken) {
325 debugEvent("Type"); 332 debugEvent("Type");
326 List<TypeBuilder> arguments = pop(); 333 List<TypeBuilder> arguments = pop();
327 String name = pop(); 334 String name = pop();
328 push(library.addNamedType(name, arguments)); 335 push(library.addNamedType(name, arguments, beginToken.charOffset));
329 } 336 }
330 337
331 @override 338 @override
332 void endTypeList(int count) { 339 void endTypeList(int count) {
333 debugEvent("TypeList"); 340 debugEvent("TypeList");
334 push(popList(count) ?? NullValue.TypeList); 341 push(popList(count) ?? NullValue.TypeList);
335 } 342 }
336 343
337 @override 344 @override
338 void endTypeVariables(int count, Token beginToken, Token endToken) { 345 void endTypeVariables(int count, Token beginToken, Token endToken) {
339 debugEvent("TypeVariables"); 346 debugEvent("TypeVariables");
340 push(popList(count) ?? NullValue.TypeVariables); 347 push(popList(count) ?? NullValue.TypeVariables);
341 } 348 }
342 349
343 @override 350 @override
344 void handleVoidKeyword(Token token) { 351 void handleVoidKeyword(Token token) {
345 debugEvent("VoidKeyword"); 352 debugEvent("VoidKeyword");
346 push(library.addVoidType()); 353 push(library.addVoidType(token.charOffset));
347 } 354 }
348 355
349 @override 356 @override
350 void endFormalParameter(Token thisKeyword) { 357 void endFormalParameter(Token thisKeyword) {
351 debugEvent("FormalParameter"); 358 debugEvent("FormalParameter");
352 String name = pop(); 359 String name = pop();
353 TypeBuilder type = pop(); 360 TypeBuilder type = pop();
354 int modifiers = Modifier.validate(pop()); 361 int modifiers = Modifier.validate(pop());
355 List<MetadataBuilder> metadata = pop(); 362 List<MetadataBuilder> metadata = pop();
363 // TODO(ahe): Needs begin token.
356 push(library.addFormalParameter(metadata, modifiers, type, name, 364 push(library.addFormalParameter(metadata, modifiers, type, name,
357 thisKeyword != null)); 365 thisKeyword != null, thisKeyword?.charOffset ?? -1));
358 } 366 }
359 367
360 @override 368 @override
361 void handleValuedFormalParameter(Token equals, Token token) { 369 void handleValuedFormalParameter(Token equals, Token token) {
362 debugEvent("ValuedFormalParameter"); 370 debugEvent("ValuedFormalParameter");
363 // Ignored for now. 371 // Ignored for now.
364 } 372 }
365 373
366 @override 374 @override
367 void endFunctionTypedFormalParameter(Token token) { 375 void endFunctionTypedFormalParameter(Token token) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 formals = new List<FormalParameterBuilder>.from(formals); 421 formals = new List<FormalParameterBuilder>.from(formals);
414 } 422 }
415 push(formals ?? NullValue.FormalParameters); 423 push(formals ?? NullValue.FormalParameters);
416 } 424 }
417 425
418 @override 426 @override
419 void endEnum(Token enumKeyword, Token endBrace, int count) { 427 void endEnum(Token enumKeyword, Token endBrace, int count) {
420 List<String> constants = popList(count); 428 List<String> constants = popList(count);
421 String name = pop(); 429 String name = pop();
422 List<MetadataBuilder> metadata = pop(); 430 List<MetadataBuilder> metadata = pop();
423 library.addEnum(metadata, name, constants); 431 library.addEnum(metadata, name, constants, enumKeyword.charOffset);
424 checkEmpty(); 432 checkEmpty();
425 } 433 }
426 434
427 @override 435 @override
428 void beginFunctionTypeAlias(Token token) { 436 void beginFunctionTypeAlias(Token token) {
429 library.beginNestedDeclaration(hasMembers: false); 437 library.beginNestedDeclaration(hasMembers: false);
430 } 438 }
431 439
432 @override 440 @override
433 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { 441 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
434 debugEvent("endFunctionTypeAlias"); 442 debugEvent("endFunctionTypeAlias");
435 List<FormalParameterBuilder> formals = pop(); 443 List<FormalParameterBuilder> formals = pop();
436 List<TypeVariableBuilder> typeVariables = pop(); 444 List<TypeVariableBuilder> typeVariables = pop();
437 String name = pop(); 445 String name = pop();
438 TypeBuilder returnType = pop(); 446 TypeBuilder returnType = pop();
439 List<MetadataBuilder> metadata = pop(); 447 List<MetadataBuilder> metadata = pop();
440 library.addFunctionTypeAlias( 448 library.addFunctionTypeAlias(
441 metadata, returnType, name, typeVariables, formals); 449 metadata, returnType, name, typeVariables, formals,
450 typedefKeyword.charOffset);
442 checkEmpty(); 451 checkEmpty();
443 } 452 }
444 453
445 @override 454 @override
446 void endTopLevelFields(int count, Token beginToken, Token endToken) { 455 void endTopLevelFields(int count, Token beginToken, Token endToken) {
447 debugEvent("endTopLevelFields"); 456 debugEvent("endTopLevelFields");
448 List<String> names = popList(count); 457 List<String> names = popList(count);
449 TypeBuilder type = pop(); 458 TypeBuilder type = pop();
450 int modifiers = Modifier.validate(pop()); 459 int modifiers = Modifier.validate(pop());
451 List<MetadataBuilder> metadata = pop(); 460 List<MetadataBuilder> metadata = pop();
452 library.addFields(metadata, modifiers, type, names); 461 library.addFields(metadata, modifiers, type, names);
453 checkEmpty(); 462 checkEmpty();
454 } 463 }
455 464
456 @override 465 @override
457 void endFields(int count, Token beginToken, Token endToken) { 466 void endFields(int count, Token beginToken, Token endToken) {
458 debugEvent("Fields"); 467 debugEvent("Fields");
459 List<String> names = popList(count); 468 List<String> names = popList(count);
460 TypeBuilder type = pop(); 469 TypeBuilder type = pop();
461 int modifiers = Modifier.validate(pop()); 470 int modifiers = Modifier.validate(pop());
462 List<MetadataBuilder> metadata = pop(); 471 List<MetadataBuilder> metadata = pop();
463 library.addFields(metadata, modifiers, type, names); 472 library.addFields(metadata, modifiers, type, names);
464 } 473 }
465 474
466 @override 475 @override
467 void endTypeVariable(Token token, Token extendsOrSuper) { 476 void endTypeVariable(Token token, Token extendsOrSuper) {
468 debugEvent("endTypeVariable"); 477 debugEvent("endTypeVariable");
469 TypeBuilder bound = pop(); 478 TypeBuilder bound = pop();
470 String name = pop(); 479 String name = pop();
471 push(library.addTypeVariable(name, bound)); 480 push(library.addTypeVariable(name, bound, token.charOffset));
472 } 481 }
473 482
474 @override 483 @override
475 void endPartOf(Token partKeyword, Token semicolon) { 484 void endPartOf(Token partKeyword, Token semicolon) {
476 debugEvent("endPartOf"); 485 debugEvent("endPartOf");
477 String name = pop(); 486 String name = pop();
478 List<MetadataBuilder> metadata = pop(); 487 List<MetadataBuilder> metadata = pop();
479 library.addPartOf(metadata, name); 488 library.addPartOf(metadata, name);
480 } 489 }
481 490
482 @override 491 @override
483 void endConstructorReference( 492 void endConstructorReference(
484 Token start, Token periodBeforeName, Token endToken) { 493 Token start, Token periodBeforeName, Token endToken) {
485 debugEvent("ConstructorReference"); 494 debugEvent("ConstructorReference");
486 String suffix = popIfNotNull(periodBeforeName); 495 String suffix = popIfNotNull(periodBeforeName);
487 List<TypeBuilder> typeArguments = pop(); 496 List<TypeBuilder> typeArguments = pop();
488 String name = pop(); 497 String name = pop();
489 push(library.addConstructorReference(name, typeArguments, suffix)); 498 push(library.addConstructorReference(
499 name, typeArguments, suffix, start.charOffset));
490 } 500 }
491 501
492 @override 502 @override
493 void endFactoryMethod(Token beginToken, Token endToken) { 503 void endFactoryMethod(Token beginToken, Token endToken) {
494 debugEvent("FactoryMethod"); 504 debugEvent("FactoryMethod");
495 MethodBody kind = pop(); 505 MethodBody kind = pop();
496 ConstructorReferenceBuilder redirectionTarget; 506 ConstructorReferenceBuilder redirectionTarget;
497 if (kind == MethodBody.RedirectingFactoryBody) { 507 if (kind == MethodBody.RedirectingFactoryBody) {
498 redirectionTarget = pop(); 508 redirectionTarget = pop();
499 } 509 }
500 AsyncMarker asyncModifier = pop(); 510 AsyncMarker asyncModifier = pop();
501 List<FormalParameterBuilder> formals = pop(); 511 List<FormalParameterBuilder> formals = pop();
502 var name = pop(); 512 var name = pop();
503 List<MetadataBuilder> metadata = pop(); 513 List<MetadataBuilder> metadata = pop();
504 library.addFactoryMethod(metadata, name, formals, asyncModifier, 514 library.addFactoryMethod(metadata, name, formals, asyncModifier,
505 redirectionTarget); 515 redirectionTarget, beginToken.charOffset);
506 } 516 }
507 517
508 @override 518 @override
509 void endRedirectingFactoryBody(Token beginToken, Token endToken) { 519 void endRedirectingFactoryBody(Token beginToken, Token endToken) {
510 debugEvent("RedirectingFactoryBody"); 520 debugEvent("RedirectingFactoryBody");
511 push(MethodBody.RedirectingFactoryBody); 521 push(MethodBody.RedirectingFactoryBody);
512 } 522 }
513 523
514 @override 524 @override
515 void endFieldInitializer(Token assignmentOperator) { 525 void endFieldInitializer(Token assignmentOperator) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 Link<Token> handleMemberName(Link<Token> identifiers) { 585 Link<Token> handleMemberName(Link<Token> identifiers) {
576 if (!isDartLibrary || identifiers.isEmpty) return identifiers; 586 if (!isDartLibrary || identifiers.isEmpty) return identifiers;
577 return removeNativeClause(identifiers); 587 return removeNativeClause(identifiers);
578 } 588 }
579 589
580 @override 590 @override
581 void debugEvent(String name) { 591 void debugEvent(String name) {
582 // printEvent(name); 592 // printEvent(name);
583 } 593 }
584 } 594 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698