@@ -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 ;
@@ -291,7 +291,7 @@ fn emit_module_items(
291291 {
292292 match value {
293293 ModuleDefId :: FunctionId ( function) => {
294- items. extend ( emit_function ( db, name . as_str ( ) , trap, function, vis ) ) ;
294+ items. push ( emit_function ( db, trap, function, name ) . into ( ) ) ;
295295 }
296296 ModuleDefId :: ConstId ( konst) => {
297297 items. extend ( emit_const ( db, name. as_str ( ) , trap, konst, vis) ) ;
@@ -336,18 +336,10 @@ fn emit_module_items(
336336
337337fn emit_function (
338338 db : & dyn HirDatabase ,
339- name : & str ,
340339 trap : & mut TrapFile ,
341340 function : ra_ap_hir_def:: FunctionId ,
342- visibility : Visibility ,
343- ) -> Option < trap:: Label < generated:: Item > > {
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) ;
341+ name : & ra_ap_hir:: Name ,
342+ ) -> trap:: Label < generated:: Function > {
351343 let sig = db. callable_item_signature ( function. into ( ) ) ;
352344 let sig = sig. skip_binders ( ) ;
353345 let params = sig
@@ -376,26 +368,35 @@ fn emit_function(
376368 type_repr : Some ( ret_type) ,
377369 } )
378370 } ) ;
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- )
371+ let name = Some ( trap. emit ( generated:: Name {
372+ id : trap:: TrapId :: Star ,
373+ text : Some ( name. as_str ( ) . to_owned ( ) ) ,
374+ } ) ) ;
375+ let data = db. function_data ( function) ;
376+ let visibility = emit_visibility (
377+ db,
378+ trap,
379+ data. visibility
380+ . resolve ( db. upcast ( ) , & function. resolver ( db. upcast ( ) ) ) ,
381+ ) ;
382+ let generic_param_list = emit_generic_param_list ( trap, db, function. into ( ) ) ;
383+ trap. emit ( generated:: Function {
384+ id : trap:: TrapId :: Star ,
385+ name,
386+ attrs : vec ! [ ] ,
387+ body : None ,
388+ is_const : data. is_const ( ) ,
389+ is_default : data. is_default ( ) ,
390+ visibility,
391+ abi : None ,
392+ is_async : data. is_async ( ) ,
393+ is_gen : false ,
394+ is_unsafe : data. is_unsafe ( ) ,
395+ generic_param_list,
396+ param_list : Some ( param_list) ,
397+ ret_type,
398+ where_clause : None ,
399+ } )
399400}
400401
401402fn emit_const (
@@ -662,60 +663,7 @@ fn emit_trait(
662663 . iter ( )
663664 . flat_map ( |( name, item) | {
664665 if let AssocItemId :: FunctionId ( function) = item {
665- let sig = db. callable_item_signature ( ( * function) . into ( ) ) ;
666- let sig = sig. skip_binders ( ) ;
667- let params = sig
668- . params ( )
669- . iter ( )
670- . map ( |p| {
671- let type_repr = emit_hir_ty ( trap, db, p) ;
672- trap. emit ( generated:: Param {
673- id : trap:: TrapId :: Star ,
674- attrs : vec ! [ ] ,
675- type_repr,
676- pat : None ,
677- } )
678- } )
679- . collect ( ) ;
680-
681- let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
682- let param_list = trap. emit ( generated:: ParamList {
683- id : trap:: TrapId :: Star ,
684- params,
685- self_param : None ,
686- } ) ;
687- let ret_type = ret_type. map ( |ret_type| {
688- trap. emit ( generated:: RetTypeRepr {
689- id : trap:: TrapId :: Star ,
690- type_repr : Some ( ret_type) ,
691- } )
692- } ) ;
693- let name = Some ( trap. emit ( generated:: Name {
694- id : trap:: TrapId :: Star ,
695- text : Some ( name. as_str ( ) . to_owned ( ) ) ,
696- } ) ) ;
697- let visibility = emit_visibility ( db, trap, visibility) ;
698- let generic_param_list = emit_generic_param_list ( trap, db, ( * function) . into ( ) ) ;
699- Some (
700- trap. emit ( generated:: Function {
701- id : trap:: TrapId :: Star ,
702- name,
703- attrs : vec ! [ ] ,
704- body : None ,
705- is_const : false ,
706- is_default : false ,
707- visibility,
708- abi : None ,
709- is_async : false ,
710- is_gen : false ,
711- is_unsafe : matches ! ( sig. to_fn_ptr( ) . sig. safety, Safety :: Unsafe ) ,
712- generic_param_list,
713- param_list : Some ( param_list) ,
714- ret_type,
715- where_clause : None ,
716- } )
717- . into ( ) ,
718- )
666+ Some ( emit_function ( db, trap, * function, name) . into ( ) )
719667 } else {
720668 None
721669 }
@@ -774,66 +722,7 @@ fn emit_module_impls(
774722 . iter ( )
775723 . flat_map ( |item| {
776724 if let ( name, AssocItemId :: FunctionId ( function) ) = item {
777- let sig = db. callable_item_signature ( ( * function) . into ( ) ) ;
778- let sig = sig. skip_binders ( ) ;
779- let params = sig
780- . params ( )
781- . iter ( )
782- . map ( |p| {
783- let type_repr = emit_hir_ty ( trap, db, p) ;
784- trap. emit ( generated:: Param {
785- id : trap:: TrapId :: Star ,
786- attrs : vec ! [ ] ,
787- type_repr,
788- pat : None ,
789- } )
790- } )
791- . collect ( ) ;
792-
793- let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
794- let param_list = trap. emit ( generated:: ParamList {
795- id : trap:: TrapId :: Star ,
796- params,
797- self_param : None ,
798- } ) ;
799- let ret_type = ret_type. map ( |ret_type| {
800- trap. emit ( generated:: RetTypeRepr {
801- id : trap:: TrapId :: Star ,
802- type_repr : Some ( ret_type) ,
803- } )
804- } ) ;
805- let name = Some ( trap. emit ( generated:: Name {
806- id : trap:: TrapId :: Star ,
807- text : Some ( name. as_str ( ) . to_owned ( ) ) ,
808- } ) ) ;
809- let data = db. function_data ( * function) ;
810- let visibility = emit_visibility (
811- db,
812- trap,
813- data. visibility
814- . resolve ( db. upcast ( ) , & function. resolver ( db. upcast ( ) ) ) ,
815- ) ;
816- let generic_param_list = emit_generic_param_list ( trap, db, ( * function) . into ( ) ) ;
817- Some (
818- trap. emit ( generated:: Function {
819- id : trap:: TrapId :: Star ,
820- name,
821- attrs : vec ! [ ] ,
822- body : None ,
823- is_const : false ,
824- is_default : false ,
825- visibility,
826- abi : None ,
827- is_async : false ,
828- is_gen : false ,
829- is_unsafe : matches ! ( sig. to_fn_ptr( ) . sig. safety, Safety :: Unsafe ) ,
830- generic_param_list,
831- param_list : Some ( param_list) ,
832- ret_type,
833- where_clause : None ,
834- } )
835- . into ( ) ,
836- )
725+ Some ( emit_function ( db, trap, * function, name) . into ( ) )
837726 } else {
838727 None
839728 }
0 commit comments