diff options
Diffstat (limited to 'crates/hir_def/src/item_tree.rs')
-rw-r--r-- | crates/hir_def/src/item_tree.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/crates/hir_def/src/item_tree.rs b/crates/hir_def/src/item_tree.rs index 09bcb10dc..7bb22c4c4 100644 --- a/crates/hir_def/src/item_tree.rs +++ b/crates/hir_def/src/item_tree.rs | |||
@@ -24,7 +24,7 @@ use la_arena::{Arena, Idx, RawIdx}; | |||
24 | use profile::Count; | 24 | use profile::Count; |
25 | use rustc_hash::FxHashMap; | 25 | use rustc_hash::FxHashMap; |
26 | use smallvec::SmallVec; | 26 | use smallvec::SmallVec; |
27 | use syntax::{ast, match_ast, SyntaxKind}; | 27 | use syntax::{ast, match_ast, SmolStr, SyntaxKind}; |
28 | 28 | ||
29 | use crate::{ | 29 | use crate::{ |
30 | attr::{Attrs, RawAttrs}, | 30 | attr::{Attrs, RawAttrs}, |
@@ -110,6 +110,11 @@ impl ItemTree { | |||
110 | // still need to collect inner items. | 110 | // still need to collect inner items. |
111 | ctx.lower_inner_items(e.syntax()) | 111 | ctx.lower_inner_items(e.syntax()) |
112 | }, | 112 | }, |
113 | ast::ExprStmt(stmt) => { | ||
114 | // Macros can expand to stmt. We return an empty item tree in this case, but | ||
115 | // still need to collect inner items. | ||
116 | ctx.lower_inner_items(stmt.syntax()) | ||
117 | }, | ||
113 | _ => { | 118 | _ => { |
114 | panic!("cannot create item tree from {:?} {}", syntax, syntax); | 119 | panic!("cannot create item tree from {:?} {}", syntax, syntax); |
115 | }, | 120 | }, |
@@ -551,16 +556,25 @@ pub struct Function { | |||
551 | pub generic_params: GenericParamsId, | 556 | pub generic_params: GenericParamsId, |
552 | pub has_self_param: bool, | 557 | pub has_self_param: bool, |
553 | pub has_body: bool, | 558 | pub has_body: bool, |
554 | pub is_unsafe: bool, | 559 | pub qualifier: FunctionQualifier, |
555 | /// Whether the function is located in an `extern` block (*not* whether it is an | 560 | /// Whether the function is located in an `extern` block (*not* whether it is an |
556 | /// `extern "abi" fn`). | 561 | /// `extern "abi" fn`). |
557 | pub is_extern: bool, | 562 | pub is_in_extern_block: bool, |
558 | pub params: Box<[Idx<TypeRef>]>, | 563 | pub params: Box<[Idx<TypeRef>]>, |
559 | pub is_varargs: bool, | 564 | pub is_varargs: bool, |
560 | pub ret_type: Idx<TypeRef>, | 565 | pub ret_type: Idx<TypeRef>, |
561 | pub ast_id: FileAstId<ast::Fn>, | 566 | pub ast_id: FileAstId<ast::Fn>, |
562 | } | 567 | } |
563 | 568 | ||
569 | #[derive(Debug, Clone, PartialEq, Eq)] | ||
570 | pub struct FunctionQualifier { | ||
571 | pub is_default: bool, | ||
572 | pub is_const: bool, | ||
573 | pub is_async: bool, | ||
574 | pub is_unsafe: bool, | ||
575 | pub abi: Option<SmolStr>, | ||
576 | } | ||
577 | |||
564 | #[derive(Debug, Clone, Eq, PartialEq)] | 578 | #[derive(Debug, Clone, Eq, PartialEq)] |
565 | pub struct Struct { | 579 | pub struct Struct { |
566 | pub name: Name, | 580 | pub name: Name, |
@@ -624,7 +638,9 @@ pub struct Trait { | |||
624 | pub name: Name, | 638 | pub name: Name, |
625 | pub visibility: RawVisibilityId, | 639 | pub visibility: RawVisibilityId, |
626 | pub generic_params: GenericParamsId, | 640 | pub generic_params: GenericParamsId, |
627 | pub auto: bool, | 641 | pub is_auto: bool, |
642 | pub is_unsafe: bool, | ||
643 | pub bounds: Box<[TypeBound]>, | ||
628 | pub items: Box<[AssocItem]>, | 644 | pub items: Box<[AssocItem]>, |
629 | pub ast_id: FileAstId<ast::Trait>, | 645 | pub ast_id: FileAstId<ast::Trait>, |
630 | } | 646 | } |