@@ -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 ;
@@ -291,7 +291,7 @@ fn emit_module_items(
291
291
{
292
292
match value {
293
293
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 ( ) ) ;
295
295
}
296
296
ModuleDefId :: ConstId ( konst) => {
297
297
items. extend ( emit_const ( db, name. as_str ( ) , trap, konst, vis) ) ;
@@ -336,18 +336,10 @@ fn emit_module_items(
336
336
337
337
fn emit_function (
338
338
db : & dyn HirDatabase ,
339
- name : & str ,
340
339
trap : & mut TrapFile ,
341
340
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 > {
351
343
let sig = db. callable_item_signature ( function. into ( ) ) ;
352
344
let sig = sig. skip_binders ( ) ;
353
345
let params = sig
@@ -376,26 +368,35 @@ fn emit_function(
376
368
type_repr : Some ( ret_type) ,
377
369
} )
378
370
} ) ;
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
+ } )
399
400
}
400
401
401
402
fn emit_const (
@@ -662,60 +663,7 @@ fn emit_trait(
662
663
. iter ( )
663
664
. flat_map ( |( name, item) | {
664
665
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 ( ) )
719
667
} else {
720
668
None
721
669
}
@@ -774,66 +722,7 @@ fn emit_module_impls(
774
722
. iter ( )
775
723
. flat_map ( |item| {
776
724
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 ( ) )
837
726
} else {
838
727
None
839
728
}
0 commit comments