Skip to content

Commit 946e0e0

Browse files
committed
Rust: get rid of const_or_function
1 parent 211789f commit 946e0e0

File tree

1 file changed

+55
-89
lines changed

1 file changed

+55
-89
lines changed

rust/extractor/src/crate_graph.rs

Lines changed: 55 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,61 @@ fn emit_function(
341341
function: ra_ap_hir_def::FunctionId,
342342
visibility: Visibility,
343343
) -> Option<trap::Label<generated::Item>> {
344-
db.value_ty(function.into())
345-
.map(|type_| const_or_function(db, name, trap, type_, visibility))
344+
let name = Some(trap.emit(generated::Name {
345+
id: trap::TrapId::Star,
346+
text: Some(name.to_owned()),
347+
}));
348+
let visibility = emit_visibility(db, trap, visibility);
349+
let generic_param_list = emit_generic_param_list(trap, db, function.into());
350+
let data = db.function_data(function);
351+
let sig = db.callable_item_signature(function.into());
352+
let sig = sig.skip_binders();
353+
let params = sig
354+
.params()
355+
.iter()
356+
.map(|p| {
357+
let type_repr = emit_hir_ty(trap, db, p);
358+
trap.emit(generated::Param {
359+
id: trap::TrapId::Star,
360+
attrs: vec![],
361+
type_repr,
362+
pat: None,
363+
})
364+
})
365+
.collect();
366+
367+
let ret_type = emit_hir_ty(trap, db, sig.ret());
368+
let param_list = trap.emit(generated::ParamList {
369+
id: trap::TrapId::Star,
370+
params,
371+
self_param: None,
372+
});
373+
let ret_type = ret_type.map(|ret_type| {
374+
trap.emit(generated::RetTypeRepr {
375+
id: trap::TrapId::Star,
376+
type_repr: Some(ret_type),
377+
})
378+
});
379+
Some(
380+
trap.emit(generated::Function {
381+
id: trap::TrapId::Star,
382+
name,
383+
attrs: vec![],
384+
body: None,
385+
is_const: data.is_const(),
386+
is_default: data.is_default(),
387+
visibility,
388+
abi: None,
389+
is_async: data.is_async(),
390+
is_gen: false,
391+
is_unsafe: data.is_unsafe(),
392+
generic_param_list,
393+
param_list: Some(param_list),
394+
ret_type,
395+
where_clause: None,
396+
})
397+
.into(),
398+
)
346399
}
347400

348401
fn emit_const(
@@ -832,94 +885,7 @@ fn emit_visibility(
832885
})
833886
})
834887
}
835-
fn const_or_function(
836-
db: &dyn HirDatabase,
837-
name: &str,
838-
trap: &mut TrapFile,
839-
type_: Binders<Ty>,
840-
visibility: Visibility,
841-
) -> trap::Label<generated::Item> {
842-
let type_: &chalk_ir::Ty<Interner> = type_.skip_binders();
843-
match type_.kind(ra_ap_hir_ty::Interner) {
844-
chalk_ir::TyKind::FnDef(fn_def_id, parameters) => {
845-
let data = db.fn_def_datum(*fn_def_id);
846-
let sig = ra_ap_hir_ty::CallableSig::from_def(db, *fn_def_id, parameters);
847-
let params = sig
848-
.params()
849-
.iter()
850-
.map(|p| {
851-
let type_repr = emit_hir_ty(trap, db, p);
852-
trap.emit(generated::Param {
853-
id: trap::TrapId::Star,
854-
attrs: vec![],
855-
type_repr,
856-
pat: None,
857-
})
858-
})
859-
.collect();
860888

861-
let ret_type = emit_hir_ty(trap, db, sig.ret());
862-
let param_list = trap.emit(generated::ParamList {
863-
id: trap::TrapId::Star,
864-
params,
865-
self_param: None,
866-
});
867-
let ret_type = ret_type.map(|ret_type| {
868-
trap.emit(generated::RetTypeRepr {
869-
id: trap::TrapId::Star,
870-
type_repr: Some(ret_type),
871-
})
872-
});
873-
let name = Some(trap.emit(generated::Name {
874-
id: trap::TrapId::Star,
875-
text: Some(name.to_owned()),
876-
}));
877-
let visibility = emit_visibility(db, trap, visibility);
878-
let callable_def_id = db.lookup_intern_callable_def((*fn_def_id).into());
879-
let generic_def_id = GenericDefId::from_callable(db.upcast(), callable_def_id);
880-
let generic_param_list: Option<trap::Label<generated::GenericParamList>> =
881-
emit_generic_param_list(trap, db, generic_def_id);
882-
883-
trap.emit(generated::Function {
884-
id: trap::TrapId::Star,
885-
name,
886-
attrs: vec![],
887-
body: None,
888-
is_const: false,
889-
is_default: false,
890-
visibility,
891-
abi: None,
892-
is_async: false,
893-
is_gen: false,
894-
is_unsafe: matches!(data.sig.safety, Safety::Unsafe),
895-
generic_param_list,
896-
param_list: Some(param_list),
897-
ret_type,
898-
where_clause: None,
899-
})
900-
.into()
901-
}
902-
_ => {
903-
let type_repr = emit_hir_ty(trap, db, type_);
904-
let name = Some(trap.emit(generated::Name {
905-
id: trap::TrapId::Star,
906-
text: Some(name.to_owned()),
907-
}));
908-
let visibility = emit_visibility(db, trap, visibility);
909-
trap.emit(generated::Const {
910-
id: trap::TrapId::Star,
911-
name,
912-
attrs: vec![],
913-
body: None,
914-
is_const: false,
915-
is_default: false,
916-
type_repr,
917-
visibility,
918-
})
919-
.into()
920-
}
921-
}
922-
}
923889
fn emit_hir_type_bound(
924890
db: &dyn HirDatabase,
925891
trap: &mut TrapFile,

0 commit comments

Comments
 (0)