Skip to content

Commit 0545f78

Browse files
committed
Rust: get rid of const_or_function
1 parent 5cfbedc commit 0545f78

File tree

1 file changed

+55
-92
lines changed

1 file changed

+55
-92
lines changed

rust/extractor/src/crate_graph.rs

Lines changed: 55 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use ra_ap_hir_ty::Ty;
2626
use ra_ap_hir_ty::TyExt;
2727
use ra_ap_hir_ty::TyLoweringContext;
2828
use ra_ap_hir_ty::WhereClause;
29-
use ra_ap_hir_ty::db::InternedCallableDefId;
3029
use ra_ap_hir_ty::from_assoc_type_id;
3130
use ra_ap_hir_ty::{Binders, FnPointer};
3231
use ra_ap_hir_ty::{Interner, ProjectionTy};
@@ -347,8 +346,61 @@ fn emit_function(
347346
function: ra_ap_hir_def::FunctionId,
348347
visibility: Visibility,
349348
) -> Option<trap::Label<generated::Item>> {
350-
db.value_ty(function.into())
351-
.map(|type_| const_or_function(db, name, trap, type_, visibility))
349+
let name = Some(trap.emit(generated::Name {
350+
id: trap::TrapId::Star,
351+
text: Some(name.to_owned()),
352+
}));
353+
let visibility = emit_visibility(db, trap, visibility);
354+
let generic_param_list = emit_generic_param_list(trap, db, function.into());
355+
let data = db.function_data(function);
356+
let sig = db.callable_item_signature(function.into());
357+
let sig = sig.skip_binders();
358+
let params = sig
359+
.params()
360+
.iter()
361+
.map(|p| {
362+
let type_repr = emit_hir_ty(trap, db, p);
363+
trap.emit(generated::Param {
364+
id: trap::TrapId::Star,
365+
attrs: vec![],
366+
type_repr,
367+
pat: None,
368+
})
369+
})
370+
.collect();
371+
372+
let ret_type = emit_hir_ty(trap, db, sig.ret());
373+
let param_list = trap.emit(generated::ParamList {
374+
id: trap::TrapId::Star,
375+
params,
376+
self_param: None,
377+
});
378+
let ret_type = ret_type.map(|ret_type| {
379+
trap.emit(generated::RetTypeRepr {
380+
id: trap::TrapId::Star,
381+
type_repr: Some(ret_type),
382+
})
383+
});
384+
Some(
385+
trap.emit(generated::Function {
386+
id: trap::TrapId::Star,
387+
name,
388+
attrs: vec![],
389+
body: None,
390+
is_const: data.is_const(),
391+
is_default: data.is_default(),
392+
visibility,
393+
abi: None,
394+
is_async: data.is_async(),
395+
is_gen: false,
396+
is_unsafe: data.is_unsafe(),
397+
generic_param_list,
398+
param_list: Some(param_list),
399+
ret_type,
400+
where_clause: None,
401+
})
402+
.into(),
403+
)
352404
}
353405

354406
fn emit_const(
@@ -838,96 +890,7 @@ fn emit_visibility(
838890
})
839891
})
840892
}
841-
fn const_or_function(
842-
db: &dyn HirDatabase,
843-
name: &str,
844-
trap: &mut TrapFile,
845-
type_: Binders<Ty>,
846-
visibility: Visibility,
847-
) -> trap::Label<generated::Item> {
848-
let type_: &chalk_ir::Ty<Interner> = type_.skip_binders();
849-
match type_.kind(ra_ap_hir_ty::Interner) {
850-
chalk_ir::TyKind::FnDef(fn_def_id, parameters) => {
851-
let callable_def_id =
852-
db.lookup_intern_callable_def(InternedCallableDefId::from(*fn_def_id));
853-
let data = db.fn_def_datum(callable_def_id);
854-
let sig = ra_ap_hir_ty::CallableSig::from_def(db, *fn_def_id, parameters);
855-
let params = sig
856-
.params()
857-
.iter()
858-
.map(|p| {
859-
let type_repr = emit_hir_ty(trap, db, p);
860-
trap.emit(generated::Param {
861-
id: trap::TrapId::Star,
862-
attrs: vec![],
863-
type_repr,
864-
pat: None,
865-
})
866-
})
867-
.collect();
868893

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

0 commit comments

Comments
 (0)