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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/outline_builder.dart

Issue 2746013003: [fasta] Add and correct even more offsets (Closed)
Patch Set: Removed formalParametersToken parameter Created 3 years, 9 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 AsyncMarker, ProcedureKind; 7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind;
8 8
9 import '../parser/parser.dart' show FormalParameterType, optional; 9 import '../parser/parser.dart' show FormalParameterType, optional;
10 10
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 TypeBuilder supertype = pop(); 215 TypeBuilder supertype = pop();
216 List<TypeVariableBuilder> typeVariables = pop(); 216 List<TypeVariableBuilder> typeVariables = pop();
217 String name = pop(); 217 String name = pop();
218 if (typeVariables != null && supertype is MixinApplicationBuilder) { 218 if (typeVariables != null && supertype is MixinApplicationBuilder) {
219 supertype.typeVariables = typeVariables; 219 supertype.typeVariables = typeVariables;
220 supertype.subclassName = name; 220 supertype.subclassName = name;
221 } 221 }
222 int modifiers = Modifier.validate(pop()); 222 int modifiers = Modifier.validate(pop());
223 List<MetadataBuilder> metadata = pop(); 223 List<MetadataBuilder> metadata = pop();
224 library.addClass(metadata, modifiers, name, typeVariables, supertype, 224 library.addClass(metadata, modifiers, name, typeVariables, supertype,
225 interfaces, beginToken.charOffset); 225 interfaces, classKeyword.next?.charOffset ?? beginToken.charOffset);
226 checkEmpty(beginToken.charOffset); 226 checkEmpty(beginToken.charOffset);
227 } 227 }
228 228
229 ProcedureKind computeProcedureKind(Token token) { 229 ProcedureKind computeProcedureKind(Token token) {
230 if (token == null) return ProcedureKind.Method; 230 if (token == null) return ProcedureKind.Method;
231 if (optional("get", token)) return ProcedureKind.Getter; 231 if (optional("get", token)) return ProcedureKind.Getter;
232 if (optional("set", token)) return ProcedureKind.Setter; 232 if (optional("set", token)) return ProcedureKind.Setter;
233 return internalError("Unhandled: ${token.lexeme}"); 233 return internalError("Unhandled: ${token.lexeme}");
234 } 234 }
235 235
236 @override 236 @override
237 void beginTopLevelMethod(Token token, Token name) { 237 void beginTopLevelMethod(Token token, Token name) {
238 library.beginNestedDeclaration(name.lexeme, hasMembers: false); 238 library.beginNestedDeclaration(name.lexeme, hasMembers: false);
239 } 239 }
240 240
241 @override 241 @override
242 void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) { 242 void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
243 debugEvent("endTopLevelMethod"); 243 debugEvent("endTopLevelMethod");
244 MethodBody kind = pop(); 244 MethodBody kind = pop();
245 AsyncMarker asyncModifier = pop(); 245 AsyncMarker asyncModifier = pop();
246 List<FormalParameterBuilder> formals = pop(); 246 List<FormalParameterBuilder> formals = pop();
247 int formalsOffset = pop();
247 List<TypeVariableBuilder> typeVariables = pop(); 248 List<TypeVariableBuilder> typeVariables = pop();
248 String name = pop(); 249 String name = pop();
249 TypeBuilder returnType = pop(); 250 TypeBuilder returnType = pop();
250 int modifiers = 251 int modifiers =
251 Modifier.validate(pop(), isAbstract: kind == MethodBody.Abstract); 252 Modifier.validate(pop(), isAbstract: kind == MethodBody.Abstract);
252 List<MetadataBuilder> metadata = pop(); 253 List<MetadataBuilder> metadata = pop();
253 checkEmpty(beginToken.charOffset); 254 checkEmpty(beginToken.charOffset);
254 library.addProcedure( 255 library.addProcedure(
255 metadata, 256 metadata,
256 modifiers, 257 modifiers,
257 returnType, 258 returnType,
258 name, 259 name,
259 typeVariables, 260 typeVariables,
260 formals, 261 formals,
261 asyncModifier, 262 asyncModifier,
262 computeProcedureKind(getOrSet), 263 computeProcedureKind(getOrSet),
263 beginToken.charOffset, 264 beginToken.charOffset,
265 formalsOffset,
264 endToken.charOffset, 266 endToken.charOffset,
265 nativeMethodName, 267 nativeMethodName,
266 isTopLevel: true); 268 isTopLevel: true);
267 nativeMethodName = null; 269 nativeMethodName = null;
268 } 270 }
269 271
270 @override 272 @override
271 void handleNoFunctionBody(Token token) { 273 void handleNoFunctionBody(Token token) {
272 debugEvent("NoFunctionBody"); 274 debugEvent("NoFunctionBody");
273 push(MethodBody.Abstract); 275 push(MethodBody.Abstract);
(...skipping 13 matching lines...) Expand all
287 @override 289 @override
288 void endMethod(Token getOrSet, Token beginToken, Token endToken) { 290 void endMethod(Token getOrSet, Token beginToken, Token endToken) {
289 debugEvent("Method"); 291 debugEvent("Method");
290 MethodBody bodyKind = pop(); 292 MethodBody bodyKind = pop();
291 if (bodyKind == MethodBody.RedirectingFactoryBody) { 293 if (bodyKind == MethodBody.RedirectingFactoryBody) {
292 // This will cause an error later. 294 // This will cause an error later.
293 pop(); 295 pop();
294 } 296 }
295 AsyncMarker asyncModifier = pop(); 297 AsyncMarker asyncModifier = pop();
296 List<FormalParameterBuilder> formals = pop(); 298 List<FormalParameterBuilder> formals = pop();
299 int formalsOffset = pop();
297 List<TypeVariableBuilder> typeVariables = pop(); 300 List<TypeVariableBuilder> typeVariables = pop();
298 dynamic nameOrOperator = pop(); 301 dynamic nameOrOperator = pop();
299 if (Operator.subtract == nameOrOperator && formals == null) { 302 if (Operator.subtract == nameOrOperator && formals == null) {
300 nameOrOperator = Operator.unaryMinus; 303 nameOrOperator = Operator.unaryMinus;
301 } 304 }
302 String name; 305 String name;
303 ProcedureKind kind; 306 ProcedureKind kind;
304 if (nameOrOperator is Operator) { 307 if (nameOrOperator is Operator) {
305 name = operatorToString(nameOrOperator); 308 name = operatorToString(nameOrOperator);
306 kind = ProcedureKind.Operator; 309 kind = ProcedureKind.Operator;
307 } else { 310 } else {
308 name = nameOrOperator; 311 name = nameOrOperator;
309 kind = computeProcedureKind(getOrSet); 312 kind = computeProcedureKind(getOrSet);
310 } 313 }
311 TypeBuilder returnType = pop(); 314 TypeBuilder returnType = pop();
312 int modifiers = 315 int modifiers =
313 Modifier.validate(pop(), isAbstract: bodyKind == MethodBody.Abstract); 316 Modifier.validate(pop(), isAbstract: bodyKind == MethodBody.Abstract);
314 List<MetadataBuilder> metadata = pop(); 317 List<MetadataBuilder> metadata = pop();
315 library.addProcedure( 318 library.addProcedure(
316 metadata, 319 metadata,
317 modifiers, 320 modifiers,
318 returnType, 321 returnType,
319 name, 322 name,
320 typeVariables, 323 typeVariables,
321 formals, 324 formals,
322 asyncModifier, 325 asyncModifier,
323 kind, 326 kind,
324 beginToken.charOffset, 327 beginToken.charOffset,
328 formalsOffset,
325 endToken.charOffset, 329 endToken.charOffset,
326 nativeMethodName, 330 nativeMethodName,
327 isTopLevel: false); 331 isTopLevel: false);
328 nativeMethodName = null; 332 nativeMethodName = null;
329 } 333 }
330 334
331 @override 335 @override
332 void endMixinApplication(Token withKeyword) { 336 void endMixinApplication(Token withKeyword) {
333 debugEvent("MixinApplication"); 337 debugEvent("MixinApplication");
334 List<TypeBuilder> mixins = pop(); 338 List<TypeBuilder> mixins = pop();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 push(popList(count) ?? NullValue.TypeVariables); 395 push(popList(count) ?? NullValue.TypeVariables);
392 } 396 }
393 397
394 @override 398 @override
395 void handleVoidKeyword(Token token) { 399 void handleVoidKeyword(Token token) {
396 debugEvent("VoidKeyword"); 400 debugEvent("VoidKeyword");
397 push(library.addVoidType(token.charOffset)); 401 push(library.addVoidType(token.charOffset));
398 } 402 }
399 403
400 @override 404 @override
401 void endFormalParameter( 405 void endFormalParameter(Token covariantKeyword, Token thisKeyword,
402 Token covariantKeyword, Token thisKeyword, FormalParameterType kind) { 406 Token nameToken, FormalParameterType kind) {
403 debugEvent("FormalParameter"); 407 debugEvent("FormalParameter");
404 String name = pop(); 408 String name = pop();
405 TypeBuilder type = pop(); 409 TypeBuilder type = pop();
406 int modifiers = Modifier.validate(pop()); 410 int modifiers = Modifier.validate(pop());
407 List<MetadataBuilder> metadata = pop(); 411 List<MetadataBuilder> metadata = pop();
408 // TODO(ahe): Needs begin token. 412 // TODO(ahe): Needs begin token.
409 push(library.addFormalParameter(metadata, modifiers, type, name, 413 push(library.addFormalParameter(
410 thisKeyword != null, thisKeyword?.charOffset ?? -1)); 414 metadata,
415 modifiers,
416 type,
417 name,
418 thisKeyword != null,
419 thisKeyword?.charOffset ?? nameToken?.charOffset ?? -1));
411 } 420 }
412 421
413 @override 422 @override
414 void handleValuedFormalParameter(Token equals, Token token) { 423 void handleValuedFormalParameter(Token equals, Token token) {
415 debugEvent("ValuedFormalParameter"); 424 debugEvent("ValuedFormalParameter");
416 // Ignored for now. 425 // Ignored for now.
417 } 426 }
418 427
419 @override 428 @override
420 void handleFormalParameterWithoutValue(Token token) { 429 void handleFormalParameterWithoutValue(Token token) {
421 debugEvent("FormalParameterWithoutValue"); 430 debugEvent("FormalParameterWithoutValue");
422 // Ignored for now. 431 // Ignored for now.
423 } 432 }
424 433
425 @override 434 @override
426 void endFunctionTypedFormalParameter( 435 void endFunctionTypedFormalParameter(
427 Token covariantKeyword, Token thisKeyword, FormalParameterType kind) { 436 Token covariantKeyword, Token thisKeyword, FormalParameterType kind) {
428 debugEvent("FunctionTypedFormalParameter"); 437 debugEvent("FunctionTypedFormalParameter");
429 pop(); // Function type parameters. 438 pop(); // Function type parameters.
439 pop(); // Formals offset
430 pop(); // Type variables. 440 pop(); // Type variables.
431 String name = pop(); 441 String name = pop();
432 pop(); // Return type. 442 pop(); // Return type.
433 push(NullValue.Type); 443 push(NullValue.Type);
434 push(name); 444 push(name);
435 } 445 }
436 446
437 @override 447 @override
438 void endOptionalFormalParameters( 448 void endOptionalFormalParameters(
439 int count, Token beginToken, Token endToken) { 449 int count, Token beginToken, Token endToken) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 } 483 }
474 } 484 }
475 if (formals != null) { 485 if (formals != null) {
476 for (var formal in formals) { 486 for (var formal in formals) {
477 if (formal is! FormalParameterBuilder) { 487 if (formal is! FormalParameterBuilder) {
478 internalError(formals); 488 internalError(formals);
479 } 489 }
480 } 490 }
481 formals = new List<FormalParameterBuilder>.from(formals); 491 formals = new List<FormalParameterBuilder>.from(formals);
482 } 492 }
493 push(beginToken.charOffset);
483 push(formals ?? NullValue.FormalParameters); 494 push(formals ?? NullValue.FormalParameters);
484 } 495 }
485 496
486 @override 497 @override
498 void handleNoFormalParameters(Token token) {
499 push(token.charOffset);
500 super.handleNoFormalParameters(token);
501 }
502
503 @override
487 void endEnum(Token enumKeyword, Token endBrace, int count) { 504 void endEnum(Token enumKeyword, Token endBrace, int count) {
488 List<String> constants = popList(count); 505 List<String> constants = popList(count);
489 String name = pop(); 506 String name = pop();
490 List<MetadataBuilder> metadata = pop(); 507 List<MetadataBuilder> metadata = pop();
491 library.addEnum( 508 library.addEnum(
492 metadata, name, constants, enumKeyword.charOffset, endBrace.charOffset); 509 metadata, name, constants, enumKeyword.charOffset, endBrace.charOffset);
493 checkEmpty(enumKeyword.charOffset); 510 checkEmpty(enumKeyword.charOffset);
494 } 511 }
495 512
496 @override 513 @override
497 void beginFunctionTypeAlias(Token token) { 514 void beginFunctionTypeAlias(Token token) {
498 library.beginNestedDeclaration(null, hasMembers: false); 515 library.beginNestedDeclaration(null, hasMembers: false);
499 } 516 }
500 517
501 @override 518 @override
502 void handleFunctionType(Token functionToken, Token endToken) { 519 void handleFunctionType(Token functionToken, Token endToken) {
503 debugEvent("FunctionType"); 520 debugEvent("FunctionType");
504 List<FormalParameterBuilder> formals = pop(); 521 List<FormalParameterBuilder> formals = pop();
522 pop(); // formals offset
505 List<TypeVariableBuilder> typeVariables = pop(); 523 List<TypeVariableBuilder> typeVariables = pop();
506 TypeBuilder returnType = pop(); 524 TypeBuilder returnType = pop();
507 push(library.addFunctionType( 525 push(library.addFunctionType(
508 returnType, typeVariables, formals, functionToken.charOffset)); 526 returnType, typeVariables, formals, functionToken.charOffset));
509 } 527 }
510 528
511 @override 529 @override
512 void endFunctionTypeAlias( 530 void endFunctionTypeAlias(
513 Token typedefKeyword, Token equals, Token endToken) { 531 Token typedefKeyword, Token equals, Token endToken) {
514 debugEvent("endFunctionTypeAlias"); 532 debugEvent("endFunctionTypeAlias");
515 List<FormalParameterBuilder> formals; 533 List<FormalParameterBuilder> formals;
516 List<TypeVariableBuilder> typeVariables; 534 List<TypeVariableBuilder> typeVariables;
517 String name; 535 String name;
518 TypeBuilder returnType; 536 TypeBuilder returnType;
519 if (equals == null) { 537 if (equals == null) {
520 formals = pop(); 538 formals = pop();
539 pop(); // formals offset
521 typeVariables = pop(); 540 typeVariables = pop();
522 name = pop(); 541 name = pop();
523 returnType = pop(); 542 returnType = pop();
524 } else { 543 } else {
525 var type = pop(); 544 var type = pop();
526 typeVariables = pop(); 545 typeVariables = pop();
527 name = pop(); 546 name = pop();
528 if (type is FunctionTypeBuilder) { 547 if (type is FunctionTypeBuilder) {
529 // TODO(ahe): We need to start a nested declaration when parsing the 548 // TODO(ahe): We need to start a nested declaration when parsing the
530 // formals and return type so we can correctly bind 549 // formals and return type so we can correctly bind
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 void endFactoryMethod( 629 void endFactoryMethod(
611 Token beginToken, Token factoryKeyword, Token endToken) { 630 Token beginToken, Token factoryKeyword, Token endToken) {
612 debugEvent("FactoryMethod"); 631 debugEvent("FactoryMethod");
613 MethodBody kind = pop(); 632 MethodBody kind = pop();
614 ConstructorReferenceBuilder redirectionTarget; 633 ConstructorReferenceBuilder redirectionTarget;
615 if (kind == MethodBody.RedirectingFactoryBody) { 634 if (kind == MethodBody.RedirectingFactoryBody) {
616 redirectionTarget = pop(); 635 redirectionTarget = pop();
617 } 636 }
618 AsyncMarker asyncModifier = pop(); 637 AsyncMarker asyncModifier = pop();
619 List<FormalParameterBuilder> formals = pop(); 638 List<FormalParameterBuilder> formals = pop();
639 int formalsOffset = pop();
620 var name = pop(); 640 var name = pop();
621 int modifiers = Modifier.validate(pop()); 641 int modifiers = Modifier.validate(pop());
622 List<MetadataBuilder> metadata = pop(); 642 List<MetadataBuilder> metadata = pop();
623 library.addFactoryMethod( 643 library.addFactoryMethod(
624 metadata, 644 metadata,
625 modifiers, 645 modifiers,
626 name, 646 name,
627 formals, 647 formals,
628 asyncModifier, 648 asyncModifier,
629 redirectionTarget, 649 redirectionTarget,
630 beginToken.charOffset, 650 beginToken.charOffset,
651 formalsOffset,
631 endToken.charOffset, 652 endToken.charOffset,
632 nativeMethodName); 653 nativeMethodName);
633 nativeMethodName = null; 654 nativeMethodName = null;
634 } 655 }
635 656
636 @override 657 @override
637 void endRedirectingFactoryBody(Token beginToken, Token endToken) { 658 void endRedirectingFactoryBody(Token beginToken, Token endToken) {
638 debugEvent("RedirectingFactoryBody"); 659 debugEvent("RedirectingFactoryBody");
639 push(MethodBody.RedirectingFactoryBody); 660 push(MethodBody.RedirectingFactoryBody);
640 } 661 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 Link<Token> handleMemberName(Link<Token> identifiers) { 728 Link<Token> handleMemberName(Link<Token> identifiers) {
708 if (!isDartLibrary || identifiers.isEmpty) return identifiers; 729 if (!isDartLibrary || identifiers.isEmpty) return identifiers;
709 return removeNativeClause(identifiers); 730 return removeNativeClause(identifiers);
710 } 731 }
711 732
712 @override 733 @override
713 void debugEvent(String name) { 734 void debugEvent(String name) {
714 // printEvent(name); 735 // printEvent(name);
715 } 736 }
716 } 737 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/parser/parser.dart ('k') | pkg/front_end/lib/src/fasta/source/source_class_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698