@@ -2,10 +2,10 @@ use crate::{
22 generated:: { self } ,
33 trap:: { self , TrapFile } ,
44} ;
5+ use chalk_ir:: FloatTy ;
56use chalk_ir:: IntTy ;
67use chalk_ir:: Scalar ;
78use chalk_ir:: UintTy ;
8- use chalk_ir:: { FloatTy , Safety } ;
99use itertools:: Itertools ;
1010use ra_ap_base_db:: { Crate , RootQueryDb } ;
1111use ra_ap_cfg:: CfgAtom ;
@@ -296,7 +296,7 @@ fn emit_module_items(
296296 {
297297 match value {
298298 ModuleDefId :: FunctionId ( function) => {
299- items. extend ( emit_function ( db, name . as_str ( ) , trap, function, vis ) ) ;
299+ items. push ( emit_function ( db, trap, function, name ) . into ( ) ) ;
300300 }
301301 ModuleDefId :: ConstId ( konst) => {
302302 items. extend ( emit_const ( db, name. as_str ( ) , trap, konst, vis) ) ;
@@ -341,18 +341,10 @@ fn emit_module_items(
341341
342342fn emit_function (
343343 db : & dyn HirDatabase ,
344- name : & str ,
345344 trap : & mut TrapFile ,
346345 function : ra_ap_hir_def:: FunctionId ,
347- visibility : Visibility ,
348- ) -> Option < trap:: Label < generated:: Item > > {
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) ;
346+ name : & ra_ap_hir:: Name ,
347+ ) -> trap:: Label < generated:: Function > {
356348 let sig = db. callable_item_signature ( function. into ( ) ) ;
357349 let sig = sig. skip_binders ( ) ;
358350 let params = sig
@@ -381,26 +373,35 @@ fn emit_function(
381373 type_repr : Some ( ret_type) ,
382374 } )
383375 } ) ;
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- )
376+ let name = Some ( trap. emit ( generated:: Name {
377+ id : trap:: TrapId :: Star ,
378+ text : Some ( name. as_str ( ) . to_owned ( ) ) ,
379+ } ) ) ;
380+ let data = db. function_data ( function) ;
381+ let visibility = emit_visibility (
382+ db,
383+ trap,
384+ data. visibility
385+ . resolve ( db. upcast ( ) , & function. resolver ( db. upcast ( ) ) ) ,
386+ ) ;
387+ let generic_param_list = emit_generic_param_list ( trap, db, function. into ( ) ) ;
388+ trap. emit ( generated:: Function {
389+ id : trap:: TrapId :: Star ,
390+ name,
391+ attrs : vec ! [ ] ,
392+ body : None ,
393+ is_const : data. is_const ( ) ,
394+ is_default : data. is_default ( ) ,
395+ visibility,
396+ abi : None ,
397+ is_async : data. is_async ( ) ,
398+ is_gen : false ,
399+ is_unsafe : data. is_unsafe ( ) ,
400+ generic_param_list,
401+ param_list : Some ( param_list) ,
402+ ret_type,
403+ where_clause : None ,
404+ } )
404405}
405406
406407fn emit_const (
@@ -667,60 +668,7 @@ fn emit_trait(
667668 . iter ( )
668669 . flat_map ( |( name, item) | {
669670 if let AssocItemId :: FunctionId ( function) = item {
670- let sig = db. callable_item_signature ( ( * function) . into ( ) ) ;
671- let sig = sig. skip_binders ( ) ;
672- let params = sig
673- . params ( )
674- . iter ( )
675- . map ( |p| {
676- let type_repr = emit_hir_ty ( trap, db, p) ;
677- trap. emit ( generated:: Param {
678- id : trap:: TrapId :: Star ,
679- attrs : vec ! [ ] ,
680- type_repr,
681- pat : None ,
682- } )
683- } )
684- . collect ( ) ;
685-
686- let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
687- let param_list = trap. emit ( generated:: ParamList {
688- id : trap:: TrapId :: Star ,
689- params,
690- self_param : None ,
691- } ) ;
692- let ret_type = ret_type. map ( |ret_type| {
693- trap. emit ( generated:: RetTypeRepr {
694- id : trap:: TrapId :: Star ,
695- type_repr : Some ( ret_type) ,
696- } )
697- } ) ;
698- let name = Some ( trap. emit ( generated:: Name {
699- id : trap:: TrapId :: Star ,
700- text : Some ( name. as_str ( ) . to_owned ( ) ) ,
701- } ) ) ;
702- let visibility = emit_visibility ( db, trap, visibility) ;
703- let generic_param_list = emit_generic_param_list ( trap, db, ( * function) . into ( ) ) ;
704- Some (
705- trap. emit ( generated:: Function {
706- id : trap:: TrapId :: Star ,
707- name,
708- attrs : vec ! [ ] ,
709- body : None ,
710- is_const : false ,
711- is_default : false ,
712- visibility,
713- abi : None ,
714- is_async : false ,
715- is_gen : false ,
716- is_unsafe : matches ! ( sig. to_fn_ptr( ) . sig. safety, Safety :: Unsafe ) ,
717- generic_param_list,
718- param_list : Some ( param_list) ,
719- ret_type,
720- where_clause : None ,
721- } )
722- . into ( ) ,
723- )
671+ Some ( emit_function ( db, trap, * function, name) . into ( ) )
724672 } else {
725673 None
726674 }
@@ -779,66 +727,7 @@ fn emit_module_impls(
779727 . iter ( )
780728 . flat_map ( |item| {
781729 if let ( name, AssocItemId :: FunctionId ( function) ) = item {
782- let sig = db. callable_item_signature ( ( * function) . into ( ) ) ;
783- let sig = sig. skip_binders ( ) ;
784- let params = sig
785- . params ( )
786- . iter ( )
787- . map ( |p| {
788- let type_repr = emit_hir_ty ( trap, db, p) ;
789- trap. emit ( generated:: Param {
790- id : trap:: TrapId :: Star ,
791- attrs : vec ! [ ] ,
792- type_repr,
793- pat : None ,
794- } )
795- } )
796- . collect ( ) ;
797-
798- let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
799- let param_list = trap. emit ( generated:: ParamList {
800- id : trap:: TrapId :: Star ,
801- params,
802- self_param : None ,
803- } ) ;
804- let ret_type = ret_type. map ( |ret_type| {
805- trap. emit ( generated:: RetTypeRepr {
806- id : trap:: TrapId :: Star ,
807- type_repr : Some ( ret_type) ,
808- } )
809- } ) ;
810- let name = Some ( trap. emit ( generated:: Name {
811- id : trap:: TrapId :: Star ,
812- text : Some ( name. as_str ( ) . to_owned ( ) ) ,
813- } ) ) ;
814- let data = db. function_data ( * function) ;
815- let visibility = emit_visibility (
816- db,
817- trap,
818- data. visibility
819- . resolve ( db. upcast ( ) , & function. resolver ( db. upcast ( ) ) ) ,
820- ) ;
821- let generic_param_list = emit_generic_param_list ( trap, db, ( * function) . into ( ) ) ;
822- Some (
823- trap. emit ( generated:: Function {
824- id : trap:: TrapId :: Star ,
825- name,
826- attrs : vec ! [ ] ,
827- body : None ,
828- is_const : false ,
829- is_default : false ,
830- visibility,
831- abi : None ,
832- is_async : false ,
833- is_gen : false ,
834- is_unsafe : matches ! ( sig. to_fn_ptr( ) . sig. safety, Safety :: Unsafe ) ,
835- generic_param_list,
836- param_list : Some ( param_list) ,
837- ret_type,
838- where_clause : None ,
839- } )
840- . into ( ) ,
841- )
730+ Some ( emit_function ( db, trap, * function, name) . into ( ) )
842731 } else {
843732 None
844733 }
0 commit comments