@@ -2,10 +2,10 @@ use crate::{
2
2
generated:: { self } ,
3
3
trap:: { self , TrapFile } ,
4
4
} ;
5
+ use chalk_ir:: FloatTy ;
5
6
use chalk_ir:: IntTy ;
6
7
use chalk_ir:: Scalar ;
7
8
use chalk_ir:: UintTy ;
8
- use chalk_ir:: { FloatTy , Safety } ;
9
9
use itertools:: Itertools ;
10
10
use ra_ap_base_db:: { Crate , RootQueryDb } ;
11
11
use ra_ap_cfg:: CfgAtom ;
@@ -296,7 +296,7 @@ fn emit_module_items(
296
296
{
297
297
match value {
298
298
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 ( ) ) ;
300
300
}
301
301
ModuleDefId :: ConstId ( konst) => {
302
302
items. extend ( emit_const ( db, name. as_str ( ) , trap, konst, vis) ) ;
@@ -341,18 +341,10 @@ fn emit_module_items(
341
341
342
342
fn emit_function (
343
343
db : & dyn HirDatabase ,
344
- name : & str ,
345
344
trap : & mut TrapFile ,
346
345
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 > {
356
348
let sig = db. callable_item_signature ( function. into ( ) ) ;
357
349
let sig = sig. skip_binders ( ) ;
358
350
let params = sig
@@ -381,26 +373,35 @@ fn emit_function(
381
373
type_repr : Some ( ret_type) ,
382
374
} )
383
375
} ) ;
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
+ } )
404
405
}
405
406
406
407
fn emit_const (
@@ -667,60 +668,7 @@ fn emit_trait(
667
668
. iter ( )
668
669
. flat_map ( |( name, item) | {
669
670
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 ( ) )
724
672
} else {
725
673
None
726
674
}
@@ -779,66 +727,7 @@ fn emit_module_impls(
779
727
. iter ( )
780
728
. flat_map ( |item| {
781
729
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 ( ) )
842
731
} else {
843
732
None
844
733
}
0 commit comments