@@ -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
348401fn 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- }
923889fn emit_hir_type_bound (
924890 db : & dyn HirDatabase ,
925891 trap : & mut TrapFile ,
0 commit comments