diff options
author | Zac Pullar-Strecker <[email protected]> | 2020-09-03 08:55:24 +0100 |
---|---|---|
committer | Zac Pullar-Strecker <[email protected]> | 2020-10-08 03:04:21 +0100 |
commit | c648884397bfdb779c447fa31964dc1fce94bd95 (patch) | |
tree | 276467ffe91360d31f285ce04bf16c0753c61a10 /crates/hir_def/src | |
parent | 62b76e7004bc215a375e41bd204b2eab5acdf9c2 (diff) |
Differentiate method/tymethod by determining 'defaultness'
Currently a method only has defaultness if it is a provided trait
method, but this will change when specialisation is available and may
need to become a concept known to hir.
I opted to go for a 'fewest changes' approach given specialisation is
still under development.
Diffstat (limited to 'crates/hir_def/src')
-rw-r--r-- | crates/hir_def/src/data.rs | 2 | ||||
-rw-r--r-- | crates/hir_def/src/item_tree.rs | 1 | ||||
-rw-r--r-- | crates/hir_def/src/item_tree/lower.rs | 3 |
3 files changed, 6 insertions, 0 deletions
diff --git a/crates/hir_def/src/data.rs b/crates/hir_def/src/data.rs index 6190906da..ff1ef0df6 100644 --- a/crates/hir_def/src/data.rs +++ b/crates/hir_def/src/data.rs | |||
@@ -25,6 +25,7 @@ pub struct FunctionData { | |||
25 | /// True if the first param is `self`. This is relevant to decide whether this | 25 | /// True if the first param is `self`. This is relevant to decide whether this |
26 | /// can be called as a method. | 26 | /// can be called as a method. |
27 | pub has_self_param: bool, | 27 | pub has_self_param: bool, |
28 | pub has_body: bool, | ||
28 | pub is_unsafe: bool, | 29 | pub is_unsafe: bool, |
29 | pub is_varargs: bool, | 30 | pub is_varargs: bool, |
30 | pub visibility: RawVisibility, | 31 | pub visibility: RawVisibility, |
@@ -42,6 +43,7 @@ impl FunctionData { | |||
42 | ret_type: func.ret_type.clone(), | 43 | ret_type: func.ret_type.clone(), |
43 | attrs: item_tree.attrs(ModItem::from(loc.id.value).into()).clone(), | 44 | attrs: item_tree.attrs(ModItem::from(loc.id.value).into()).clone(), |
44 | has_self_param: func.has_self_param, | 45 | has_self_param: func.has_self_param, |
46 | has_body: func.has_body, | ||
45 | is_unsafe: func.is_unsafe, | 47 | is_unsafe: func.is_unsafe, |
46 | is_varargs: func.is_varargs, | 48 | is_varargs: func.is_varargs, |
47 | visibility: item_tree[func.visibility].clone(), | 49 | visibility: item_tree[func.visibility].clone(), |
diff --git a/crates/hir_def/src/item_tree.rs b/crates/hir_def/src/item_tree.rs index 0fd91b9d0..8a1121bbd 100644 --- a/crates/hir_def/src/item_tree.rs +++ b/crates/hir_def/src/item_tree.rs | |||
@@ -505,6 +505,7 @@ pub struct Function { | |||
505 | pub visibility: RawVisibilityId, | 505 | pub visibility: RawVisibilityId, |
506 | pub generic_params: GenericParamsId, | 506 | pub generic_params: GenericParamsId, |
507 | pub has_self_param: bool, | 507 | pub has_self_param: bool, |
508 | pub has_body: bool, | ||
508 | pub is_unsafe: bool, | 509 | pub is_unsafe: bool, |
509 | pub params: Box<[TypeRef]>, | 510 | pub params: Box<[TypeRef]>, |
510 | pub is_varargs: bool, | 511 | pub is_varargs: bool, |
diff --git a/crates/hir_def/src/item_tree/lower.rs b/crates/hir_def/src/item_tree/lower.rs index 54814f141..3328639cf 100644 --- a/crates/hir_def/src/item_tree/lower.rs +++ b/crates/hir_def/src/item_tree/lower.rs | |||
@@ -330,12 +330,15 @@ impl Ctx { | |||
330 | ret_type | 330 | ret_type |
331 | }; | 331 | }; |
332 | 332 | ||
333 | let has_body = func.body().is_some(); | ||
334 | |||
333 | let ast_id = self.source_ast_id_map.ast_id(func); | 335 | let ast_id = self.source_ast_id_map.ast_id(func); |
334 | let mut res = Function { | 336 | let mut res = Function { |
335 | name, | 337 | name, |
336 | visibility, | 338 | visibility, |
337 | generic_params: GenericParamsId::EMPTY, | 339 | generic_params: GenericParamsId::EMPTY, |
338 | has_self_param, | 340 | has_self_param, |
341 | has_body, | ||
339 | is_unsafe: func.unsafe_token().is_some(), | 342 | is_unsafe: func.unsafe_token().is_some(), |
340 | params: params.into_boxed_slice(), | 343 | params: params.into_boxed_slice(), |
341 | is_varargs, | 344 | is_varargs, |