aboutsummaryrefslogtreecommitdiff
path: root/xtask/src
diff options
context:
space:
mode:
authorLuca Barbieri <[email protected]>2020-04-03 20:12:09 +0100
committerAleksey Kladov <[email protected]>2020-04-09 10:50:37 +0100
commit60f4d7bd8c0ecb9f23557464e824140a2be8f41a (patch)
tree00aea343b133272e1df072bd7c839fddf07f36f6 /xtask/src
parent85956932872481cf4813c5e7794d981a9edb4623 (diff)
Provide more complete AST accessors to support usage in rustc
Diffstat (limited to 'xtask/src')
-rw-r--r--xtask/src/ast_src.rs383
1 files changed, 292 insertions, 91 deletions
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs
index d9f51ec39..3200acc86 100644
--- a/xtask/src/ast_src.rs
+++ b/xtask/src/ast_src.rs
@@ -70,7 +70,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
70 "match", "mod", "move", "mut", "pub", "ref", "return", "self", "static", "struct", "super", 70 "match", "mod", "move", "mut", "pub", "ref", "return", "self", "static", "struct", "super",
71 "trait", "true", "try", "type", "unsafe", "use", "where", "while", 71 "trait", "true", "try", "type", "unsafe", "use", "where", "while",
72 ], 72 ],
73 contextual_keywords: &["auto", "default", "existential", "union"], 73 contextual_keywords: &["auto", "default", "existential", "union", "raw"],
74 literals: &[ 74 literals: &[
75 "INT_NUMBER", 75 "INT_NUMBER",
76 "FLOAT_NUMBER", 76 "FLOAT_NUMBER",
@@ -297,235 +297,311 @@ macro_rules! ast_enums {
297 297
298pub(crate) const AST_SRC: AstSrc = AstSrc { 298pub(crate) const AST_SRC: AstSrc = AstSrc {
299 nodes: &ast_nodes! { 299 nodes: &ast_nodes! {
300 struct SourceFile: ModuleItemOwner, FnDefOwner { 300 struct SourceFile: ModuleItemOwner, FnDefOwner, AttrsOwner {
301 modules: [Module], 301 modules: [Module],
302 } 302 }
303 303
304 struct FnDef: VisibilityOwner, NameOwner, TypeParamsOwner, DocCommentsOwner, AttrsOwner { 304 struct FnDef: VisibilityOwner, NameOwner, TypeParamsOwner, DocCommentsOwner, AttrsOwner {
305 Abi,
306 ConstKw,
307 DefaultKw,
308 AsyncKw,
309 UnsafeKw,
310 FnKw,
305 ParamList, 311 ParamList,
306 RetType, 312 RetType,
307 body: BlockExpr, 313 body: BlockExpr,
314 Semi
308 } 315 }
309 316
310 struct RetType { TypeRef } 317 struct RetType { ThinArrow, TypeRef }
311 318
312 struct StructDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 319 struct StructDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
320 StructKw,
321 FieldDefList,
322 Semi
313 } 323 }
314 324
315 struct UnionDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 325 struct UnionDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
326 UnionKw,
316 RecordFieldDefList, 327 RecordFieldDefList,
317 } 328 }
318 329
319 struct RecordFieldDefList { fields: [RecordFieldDef] } 330 struct RecordFieldDefList { LCurly, fields: [RecordFieldDef], RCurly }
320 struct RecordFieldDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { } 331 struct RecordFieldDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { }
321 332
322 struct TupleFieldDefList { fields: [TupleFieldDef] } 333 struct TupleFieldDefList { LParen, fields: [TupleFieldDef], RParen }
323 struct TupleFieldDef: VisibilityOwner, AttrsOwner { 334 struct TupleFieldDef: VisibilityOwner, AttrsOwner {
324 TypeRef, 335 TypeRef,
325 } 336 }
326 337
327 struct EnumDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 338 struct EnumDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
339 EnumKw,
328 variant_list: EnumVariantList, 340 variant_list: EnumVariantList,
329 } 341 }
330 struct EnumVariantList { 342 struct EnumVariantList {
343 LCurly,
331 variants: [EnumVariant], 344 variants: [EnumVariant],
345 RCurly
332 } 346 }
333 struct EnumVariant: NameOwner, DocCommentsOwner, AttrsOwner { 347 struct EnumVariant: VisibilityOwner, NameOwner, DocCommentsOwner, AttrsOwner {
348 FieldDefList,
349 Eq,
334 Expr 350 Expr
335 } 351 }
336 352
337 struct TraitDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeParamsOwner, TypeBoundsOwner { 353 struct TraitDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeParamsOwner, TypeBoundsOwner {
354 UnsafeKw,
355 AutoKw,
356 TraitKw,
338 ItemList, 357 ItemList,
339 } 358 }
340 359
341 struct Module: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner { 360 struct Module: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner {
361 ModKw,
342 ItemList, 362 ItemList,
363 Semi
343 } 364 }
344 365
345 struct ItemList: FnDefOwner, ModuleItemOwner { 366 struct ItemList: FnDefOwner, ModuleItemOwner {
367 LCurly,
346 impl_items: [ImplItem], 368 impl_items: [ImplItem],
369 RCurly
347 } 370 }
348 371
349 struct ConstDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { 372 struct ConstDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner {
373 DefaultKw,
374 ConstKw,
375 Eq,
350 body: Expr, 376 body: Expr,
377 Semi
351 } 378 }
352 379
353 struct StaticDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { 380 struct StaticDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner {
381 StaticKw,
382 MutKw,
383 Eq,
354 body: Expr, 384 body: Expr,
385 Semi
355 } 386 }
356 387
357 struct TypeAliasDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeBoundsOwner { 388 struct TypeAliasDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeBoundsOwner {
389 DefaultKw,
390 TypeKw,
391 Eq,
358 TypeRef, 392 TypeRef,
393 Semi
359 } 394 }
360 395
361 struct ImplDef: TypeParamsOwner, AttrsOwner { 396 struct ImplDef: TypeParamsOwner, AttrsOwner {
397 DefaultKw,
398 ConstKw,
399 UnsafeKw,
400 ImplKw,
401 Excl,
402 ForKw,
362 ItemList, 403 ItemList,
363 } 404 }
364 405
365 struct ParenType { TypeRef } 406 struct ParenType { LParen, TypeRef, RParen }
366 struct TupleType { fields: [TypeRef] } 407 struct TupleType { LParen, fields: [TypeRef], RParen }
367 struct NeverType { } 408 struct NeverType { Excl }
368 struct PathType { Path } 409 struct PathType { Path }
369 struct PointerType { TypeRef } 410 struct PointerType { Star, ConstKw, TypeRef }
370 struct ArrayType { TypeRef, Expr } 411 struct ArrayType { LBrack, TypeRef, Semi, Expr, RBrack }
371 struct SliceType { TypeRef } 412 struct SliceType { LBrack, TypeRef, RBrack }
372 struct ReferenceType { TypeRef } 413 struct ReferenceType { Amp, Lifetime, MutKw, TypeRef }
373 struct PlaceholderType { } 414 struct PlaceholderType { Underscore }
374 struct FnPointerType { ParamList, RetType } 415 struct FnPointerType { Abi, UnsafeKw, FnKw, ParamList, RetType }
375 struct ForType { TypeRef } 416 struct ForType { ForKw, TypeParamList, TypeRef }
376 struct ImplTraitType: TypeBoundsOwner {} 417 struct ImplTraitType: TypeBoundsOwner { ImplKw }
377 struct DynTraitType: TypeBoundsOwner {} 418 struct DynTraitType: TypeBoundsOwner { DynKw }
378 419
379 struct TupleExpr { exprs: [Expr] } 420 struct TupleExpr: AttrsOwner { LParen, exprs: [Expr], RParen }
380 struct ArrayExpr { exprs: [Expr] } 421 struct ArrayExpr: AttrsOwner { LBrack, exprs: [Expr], Semi, RBrack }
381 struct ParenExpr { Expr } 422 struct ParenExpr: AttrsOwner { LParen, Expr, RParen }
382 struct PathExpr { Path } 423 struct PathExpr { Path }
383 struct LambdaExpr { 424 struct LambdaExpr: AttrsOwner {
425 StaticKw,
426 AsyncKw,
427 MoveKw,
384 ParamList, 428 ParamList,
385 RetType, 429 RetType,
386 body: Expr, 430 body: Expr,
387 } 431 }
388 struct IfExpr { Condition } 432 struct IfExpr: AttrsOwner { IfKw, Condition }
389 struct LoopExpr: LoopBodyOwner { } 433 struct LoopExpr: AttrsOwner, LoopBodyOwner { LoopKw }
390 struct TryBlockExpr { body: BlockExpr } 434 struct TryBlockExpr: AttrsOwner { TryKw, body: BlockExpr }
391 struct ForExpr: LoopBodyOwner { 435 struct ForExpr: AttrsOwner, LoopBodyOwner {
436 ForKw,
392 Pat, 437 Pat,
438 InKw,
393 iterable: Expr, 439 iterable: Expr,
394 } 440 }
395 struct WhileExpr: LoopBodyOwner { Condition } 441 struct WhileExpr: AttrsOwner, LoopBodyOwner { WhileKw, Condition }
396 struct ContinueExpr {} 442 struct ContinueExpr: AttrsOwner { ContinueKw, Lifetime }
397 struct BreakExpr { Expr } 443 struct BreakExpr: AttrsOwner { BreakKw, Lifetime, Expr }
398 struct Label {} 444 struct Label { Lifetime }
399 struct BlockExpr { Block } 445 struct BlockExpr: AttrsOwner { Label, UnsafeKw, Block }
400 struct ReturnExpr { Expr } 446 struct ReturnExpr: AttrsOwner { Expr }
401 struct CallExpr: ArgListOwner { Expr } 447 struct CallExpr: ArgListOwner { Expr }
402 struct MethodCallExpr: ArgListOwner { 448 struct MethodCallExpr: AttrsOwner, ArgListOwner {
403 Expr, NameRef, TypeArgList, 449 Expr, Dot, NameRef, TypeArgList,
404 } 450 }
405 struct IndexExpr {} 451 struct IndexExpr: AttrsOwner { LBrack, RBrack }
406 struct FieldExpr { Expr, NameRef } 452 struct FieldExpr: AttrsOwner { Expr, Dot, NameRef }
407 struct AwaitExpr { Expr } 453 struct AwaitExpr: AttrsOwner { Expr, Dot, AwaitKw }
408 struct TryExpr { Expr } 454 struct TryExpr: AttrsOwner { TryKw, Expr }
409 struct CastExpr { Expr, TypeRef } 455 struct CastExpr: AttrsOwner { Expr, AsKw, TypeRef }
410 struct RefExpr { Expr } 456 struct RefExpr: AttrsOwner { Amp, RawKw, MutKw, Expr }
411 struct PrefixExpr { Expr } 457 struct PrefixExpr: AttrsOwner { PrefixOp, Expr }
412 struct BoxExpr { Expr } 458 struct BoxExpr: AttrsOwner { BoxKw, Expr }
413 struct RangeExpr {} 459 struct RangeExpr: AttrsOwner { RangeOp }
414 struct BinExpr {} 460 struct BinExpr: AttrsOwner { BinOp }
415 struct Literal {} 461 struct Literal { LiteralToken }
416 462
417 struct MatchExpr { Expr, MatchArmList } 463 struct MatchExpr: AttrsOwner { MatchKw, Expr, MatchArmList }
418 struct MatchArmList: AttrsOwner { arms: [MatchArm] } 464 struct MatchArmList: AttrsOwner { LCurly, arms: [MatchArm], RCurly }
419 struct MatchArm: AttrsOwner { 465 struct MatchArm: AttrsOwner {
420 pat: Pat, 466 pat: Pat,
421 guard: MatchGuard, 467 guard: MatchGuard,
468 FatArrow,
422 Expr, 469 Expr,
423 } 470 }
424 struct MatchGuard { Expr } 471 struct MatchGuard { IfKw, Expr }
425 472
426 struct RecordLit { Path, RecordFieldList } 473 struct RecordLit { Path, RecordFieldList}
427 struct RecordFieldList { 474 struct RecordFieldList {
475 LCurly,
428 fields: [RecordField], 476 fields: [RecordField],
477 Dotdot,
429 spread: Expr, 478 spread: Expr,
479 RCurly
430 } 480 }
431 struct RecordField { NameRef, Expr } 481 struct RecordField: AttrsOwner { NameRef, Colon, Expr }
432 482
433 struct OrPat { pats: [Pat] } 483 struct OrPat { pats: [Pat] }
434 struct ParenPat { Pat } 484 struct ParenPat { LParen, Pat, RParen }
435 struct RefPat { Pat } 485 struct RefPat { Amp, MutKw, Pat }
436 struct BoxPat { Pat } 486 struct BoxPat { BoxKw, Pat }
437 struct BindPat: NameOwner { Pat } 487 struct BindPat: AttrsOwner, NameOwner { RefKw, MutKw, Pat }
438 struct PlaceholderPat { } 488 struct PlaceholderPat { Underscore }
439 struct DotDotPat { } 489 struct DotDotPat { Dotdot }
440 struct PathPat { Path } 490 struct PathPat { Path }
441 struct SlicePat { args: [Pat] } 491 struct SlicePat { LBrack, args: [Pat], RBrack }
442 struct RangePat {} 492 struct RangePat { RangeSeparator }
443 struct LiteralPat { Literal } 493 struct LiteralPat { Literal }
444 struct MacroPat { MacroCall } 494 struct MacroPat { MacroCall }
445 495
446 struct RecordPat { RecordFieldPatList, Path } 496 struct RecordPat { RecordFieldPatList, Path }
447 struct RecordFieldPatList { 497 struct RecordFieldPatList {
498 LCurly,
499 pats: [RecordInnerPat],
448 record_field_pats: [RecordFieldPat], 500 record_field_pats: [RecordFieldPat],
449 bind_pats: [BindPat], 501 bind_pats: [BindPat],
502 Dotdot,
503 RCurly
450 } 504 }
451 struct RecordFieldPat: NameOwner { Pat } 505 struct RecordFieldPat: AttrsOwner, NameOwner { Colon, Pat }
452 506
453 struct TupleStructPat { Path, args: [Pat] } 507 struct TupleStructPat { Path, LParen, args: [Pat], RParen }
454 struct TuplePat { args: [Pat] } 508 struct TuplePat { LParen, args: [Pat], RParen }
455 509
456 struct Visibility {} 510 struct Visibility { PubKw, SuperKw, SelfKw, CrateKw }
457 struct Name {} 511 struct Name { Ident }
458 struct NameRef {} 512 struct NameRef { NameRefToken }
459 513
460 struct MacroCall: NameOwner, AttrsOwner,DocCommentsOwner { 514 struct MacroCall: NameOwner, AttrsOwner,DocCommentsOwner {
461 TokenTree, Path 515 Path, Excl, TokenTree, Semi
462 } 516 }
463 struct Attr { Path, input: AttrInput } 517 struct Attr { Pound, Excl, LBrack, Path, Eq, input: AttrInput, RBrack }
464 struct TokenTree {} 518 struct TokenTree {}
465 struct TypeParamList { 519 struct TypeParamList {
520 LAngle,
521 generic_params: [GenericParam],
466 type_params: [TypeParam], 522 type_params: [TypeParam],
467 lifetime_params: [LifetimeParam], 523 lifetime_params: [LifetimeParam],
524 const_params: [ConstParam],
525 RAngle
468 } 526 }
469 struct TypeParam: NameOwner, AttrsOwner, TypeBoundsOwner { 527 struct TypeParam: NameOwner, AttrsOwner, TypeBoundsOwner {
528 Eq,
470 default_type: TypeRef, 529 default_type: TypeRef,
471 } 530 }
472 struct ConstParam: NameOwner, AttrsOwner, TypeAscriptionOwner { 531 struct ConstParam: NameOwner, AttrsOwner, TypeAscriptionOwner {
532 Eq,
473 default_val: Expr, 533 default_val: Expr,
474 } 534 }
475 struct LifetimeParam: AttrsOwner { } 535 struct LifetimeParam: AttrsOwner { Lifetime}
476 struct TypeBound { TypeRef} 536 struct TypeBound { Lifetime, /* Question, */ ConstKw, /* Question, */ TypeRef}
477 struct TypeBoundList { bounds: [TypeBound] } 537 struct TypeBoundList { bounds: [TypeBound] }
478 struct WherePred: TypeBoundsOwner { TypeRef } 538 struct WherePred: TypeBoundsOwner { Lifetime, TypeRef }
479 struct WhereClause { predicates: [WherePred] } 539 struct WhereClause { WhereKw, predicates: [WherePred] }
480 struct ExprStmt { Expr } 540 struct Abi { String }
481 struct LetStmt: TypeAscriptionOwner { 541 struct ExprStmt: AttrsOwner { Expr, Semi }
542 struct LetStmt: AttrsOwner, TypeAscriptionOwner {
543 LetKw,
482 Pat, 544 Pat,
545 Eq,
483 initializer: Expr, 546 initializer: Expr,
484 } 547 }
485 struct Condition { Pat, Expr } 548 struct Condition { LetKw, Pat, Eq, Expr }
486 struct Block: AttrsOwner, ModuleItemOwner { 549 struct Block: AttrsOwner, ModuleItemOwner {
550 LCurly,
487 statements: [Stmt], 551 statements: [Stmt],
552 statements_or_semi: [StmtOrSemi],
488 Expr, 553 Expr,
554 RCurly,
489 } 555 }
490 struct ParamList { 556 struct ParamList {
557 LParen,
491 SelfParam, 558 SelfParam,
492 params: [Param], 559 params: [Param],
560 RParen
493 } 561 }
494 struct SelfParam: TypeAscriptionOwner, AttrsOwner { } 562 struct SelfParam: TypeAscriptionOwner, AttrsOwner { Amp, Lifetime, SelfKw }
495 struct Param: TypeAscriptionOwner, AttrsOwner { 563 struct Param: TypeAscriptionOwner, AttrsOwner {
496 Pat, 564 Pat,
565 Dotdotdot
497 } 566 }
498 struct UseItem: AttrsOwner, VisibilityOwner { 567 struct UseItem: AttrsOwner, VisibilityOwner {
568 UseKw,
499 UseTree, 569 UseTree,
500 } 570 }
501 struct UseTree { 571 struct UseTree {
502 Path, UseTreeList, Alias 572 Path, Star, UseTreeList, Alias
503 } 573 }
504 struct Alias: NameOwner { } 574 struct Alias: NameOwner { AsKw }
505 struct UseTreeList { use_trees: [UseTree] } 575 struct UseTreeList { LCurly, use_trees: [UseTree], RCurly }
506 struct ExternCrateItem: AttrsOwner, VisibilityOwner { 576 struct ExternCrateItem: AttrsOwner, VisibilityOwner {
507 NameRef, Alias, 577 ExternKw, CrateKw, NameRef, Alias,
508 } 578 }
509 struct ArgList { 579 struct ArgList {
580 LParen,
510 args: [Expr], 581 args: [Expr],
582 RParen
511 } 583 }
512 struct Path { 584 struct Path {
513 segment: PathSegment, 585 segment: PathSegment,
514 qualifier: Path, 586 qualifier: Path,
515 } 587 }
516 struct PathSegment { 588 struct PathSegment {
517 NameRef, TypeArgList, ParamList, RetType, PathType, 589 Coloncolon, LAngle, NameRef, TypeArgList, ParamList, RetType, PathType, RAngle
518 } 590 }
519 struct TypeArgList { 591 struct TypeArgList {
592 Coloncolon,
593 LAngle,
594 generic_args: [GenericArg],
520 type_args: [TypeArg], 595 type_args: [TypeArg],
521 lifetime_args: [LifetimeArg], 596 lifetime_args: [LifetimeArg],
522 assoc_type_args: [AssocTypeArg], 597 assoc_type_args: [AssocTypeArg],
523 const_arg: [ConstArg], 598 const_args: [ConstArg],
599 RAngle
524 } 600 }
525 struct TypeArg { TypeRef } 601 struct TypeArg { TypeRef }
526 struct AssocTypeArg { NameRef, TypeRef } 602 struct AssocTypeArg : TypeBoundsOwner { NameRef, Eq, TypeRef }
527 struct LifetimeArg {} 603 struct LifetimeArg { Lifetime }
528 struct ConstArg { Literal, BlockExpr } 604 struct ConstArg { Literal, Eq, BlockExpr }
529 605
530 struct MacroItems: ModuleItemOwner, FnDefOwner { } 606 struct MacroItems: ModuleItemOwner, FnDefOwner { }
531 607
@@ -533,12 +609,44 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
533 statements: [Stmt], 609 statements: [Stmt],
534 Expr, 610 Expr,
535 } 611 }
612
613 struct ExternItemList: FnDefOwner, ModuleItemOwner {
614 LCurly,
615 extern_items: [ExternItem],
616 RCurly
617 }
618
619 struct ExternBlock {
620 Abi,
621 ExternItemList
622 }
623
624 struct MetaItem {
625 Path, Eq, AttrInput, nested_meta_items: [MetaItem]
626 }
627
628 struct MacroDef {
629 Name, TokenTree
630 }
536 }, 631 },
537 enums: &ast_enums! { 632 enums: &ast_enums! {
538 enum NominalDef: NameOwner, TypeParamsOwner, AttrsOwner { 633 enum NominalDef: NameOwner, TypeParamsOwner, AttrsOwner {
539 StructDef, EnumDef, UnionDef, 634 StructDef, EnumDef, UnionDef,
540 } 635 }
541 636
637 enum GenericParam {
638 LifetimeParam,
639 TypeParam,
640 ConstParam
641 }
642
643 enum GenericArg {
644 LifetimeArg,
645 TypeArg,
646 ConstArg,
647 AssocTypeArg
648 }
649
542 enum TypeRef { 650 enum TypeRef {
543 ParenType, 651 ParenType,
544 TupleType, 652 TupleType,
@@ -555,7 +663,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
555 DynTraitType, 663 DynTraitType,
556 } 664 }
557 665
558 enum ModuleItem: AttrsOwner, VisibilityOwner { 666 enum ModuleItem: NameOwner, AttrsOwner, VisibilityOwner {
559 StructDef, 667 StructDef,
560 UnionDef, 668 UnionDef,
561 EnumDef, 669 EnumDef,
@@ -569,13 +677,20 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
569 StaticDef, 677 StaticDef,
570 Module, 678 Module,
571 MacroCall, 679 MacroCall,
680 ExternBlock
572 } 681 }
573 682
574 enum ImplItem: AttrsOwner { 683 /* impl blocks can also contain MacroCall */
575 FnDef, TypeAliasDef, ConstDef, 684 enum ImplItem: NameOwner, AttrsOwner {
685 FnDef, TypeAliasDef, ConstDef
576 } 686 }
577 687
578 enum Expr { 688 /* extern blocks can also contain MacroCall */
689 enum ExternItem: NameOwner, AttrsOwner, VisibilityOwner {
690 FnDef, StaticDef
691 }
692
693 enum Expr: AttrsOwner {
579 TupleExpr, 694 TupleExpr,
580 ArrayExpr, 695 ArrayExpr,
581 ParenExpr, 696 ParenExpr,
@@ -627,7 +742,93 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
627 MacroPat, 742 MacroPat,
628 } 743 }
629 744
745 enum RecordInnerPat {
746 RecordFieldPat,
747 BindPat
748 }
749
630 enum AttrInput { Literal, TokenTree } 750 enum AttrInput { Literal, TokenTree }
631 enum Stmt { ExprStmt, LetStmt } 751 enum Stmt {
752 ModuleItem,
753 LetStmt,
754 ExprStmt,
755 // macro calls are parsed as expression statements */
756 }
757 enum StmtOrSemi {Stmt, Semi}
758
759 enum LeftDelimiter { LParen, LBrack, LCurly }
760 enum RightDelimiter { RParen, RBrack, RCurly }
761 enum RangeSeparator { Dotdot, Dotdotdot, Dotdoteq}
762
763 enum BinOp {
764 Pipepipe,
765 Ampamp,
766 Eqeq,
767 Neq,
768 Lteq,
769 Gteq,
770 LAngle,
771 RAngle,
772 Plus,
773 Star,
774 Minus,
775 Slash,
776 Percent,
777 Shl,
778 Shr,
779 Caret,
780 Pipe,
781 Amp,
782 Eq,
783 Pluseq,
784 Slasheq,
785 Stareq,
786 Percenteq,
787 Shreq,
788 Shleq,
789 Minuseq,
790 Pipeeq,
791 Ampeq,
792 Careteq,
793 }
794
795 enum PrefixOp {
796 Minus,
797 Excl,
798 Star
799 }
800
801 enum RangeOp {
802 Dotdot,
803 Dotdoteq
804 }
805
806 enum LiteralToken {
807 IntNumber,
808 FloatNumber,
809 String,
810 RawString,
811 TrueKw,
812 FalseKw,
813 ByteString,
814 RawByteString,
815 Char,
816 Byte
817 }
818
819 enum NameRefToken {
820 Ident,
821 IntNumber
822 }
823
824 enum FieldDefList {
825 RecordFieldDefList,
826 TupleFieldDefList,
827 }
828
829 enum AttrOrComment {
830 Attr,
831 Comment
832 }
632 }, 833 },
633}; 834};