aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_def/src/item_tree
diff options
context:
space:
mode:
authoroxalica <[email protected]>2021-03-14 10:00:11 +0000
committeroxalica <[email protected]>2021-03-15 17:03:07 +0000
commit2bb8956a102cb2efbea35e414a8214fba2efcaf6 (patch)
treed1ab34b0c43e603f294ecb8f09ae5b5a5736d809 /crates/hir_def/src/item_tree
parentb9c172a977135760006b6222820ac7240be67d58 (diff)
Introduce FunctionQualifier for hir::FunctionData
Diffstat (limited to 'crates/hir_def/src/item_tree')
-rw-r--r--crates/hir_def/src/item_tree/lower.rs27
1 files changed, 23 insertions, 4 deletions
diff --git a/crates/hir_def/src/item_tree/lower.rs b/crates/hir_def/src/item_tree/lower.rs
index 240fdacf9..6b5438dc9 100644
--- a/crates/hir_def/src/item_tree/lower.rs
+++ b/crates/hir_def/src/item_tree/lower.rs
@@ -391,14 +391,33 @@ impl Ctx {
391 let has_body = func.body().is_some(); 391 let has_body = func.body().is_some();
392 392
393 let ast_id = self.source_ast_id_map.ast_id(func); 393 let ast_id = self.source_ast_id_map.ast_id(func);
394 let qualifier = FunctionQualifier {
395 is_default: func.default_token().is_some(),
396 is_const: func.const_token().is_some(),
397 is_async: func.async_token().is_some(),
398 is_unsafe: func.unsafe_token().is_some(),
399 abi: func.abi().map(|abi| {
400 // FIXME: Abi::abi() -> Option<SyntaxToken>?
401 match abi.syntax().last_token() {
402 Some(tok) if tok.kind() == SyntaxKind::STRING => {
403 // FIXME: Better way to unescape?
404 tok.text().trim_matches('"').into()
405 }
406 _ => {
407 // `extern` default to be `extern "C"`.
408 "C".into()
409 }
410 }
411 }),
412 };
394 let mut res = Function { 413 let mut res = Function {
395 name, 414 name,
396 visibility, 415 visibility,
397 generic_params: GenericParamsId::EMPTY, 416 generic_params: GenericParamsId::EMPTY,
398 has_self_param, 417 has_self_param,
399 has_body, 418 has_body,
400 is_unsafe: func.unsafe_token().is_some(), 419 qualifier,
401 is_extern: false, 420 is_in_extern_block: false,
402 params, 421 params,
403 is_varargs, 422 is_varargs,
404 ret_type, 423 ret_type,
@@ -608,8 +627,8 @@ impl Ctx {
608 ast::ExternItem::Fn(ast) => { 627 ast::ExternItem::Fn(ast) => {
609 let func_id = self.lower_function(&ast)?; 628 let func_id = self.lower_function(&ast)?;
610 let func = &mut self.data().functions[func_id.index]; 629 let func = &mut self.data().functions[func_id.index];
611 func.is_unsafe = is_intrinsic_fn_unsafe(&func.name); 630 func.qualifier.is_unsafe = is_intrinsic_fn_unsafe(&func.name);
612 func.is_extern = true; 631 func.is_in_extern_block = true;
613 func_id.into() 632 func_id.into()
614 } 633 }
615 ast::ExternItem::Static(ast) => { 634 ast::ExternItem::Static(ast) => {