@@ -26,7 +26,6 @@ use ra_ap_hir_ty::Ty;
26
26
use ra_ap_hir_ty:: TyExt ;
27
27
use ra_ap_hir_ty:: TyLoweringContext ;
28
28
use ra_ap_hir_ty:: WhereClause ;
29
- use ra_ap_hir_ty:: db:: InternedCallableDefId ;
30
29
use ra_ap_hir_ty:: from_assoc_type_id;
31
30
use ra_ap_hir_ty:: { Binders , FnPointer } ;
32
31
use ra_ap_hir_ty:: { Interner , ProjectionTy } ;
@@ -347,8 +346,61 @@ fn emit_function(
347
346
function : ra_ap_hir_def:: FunctionId ,
348
347
visibility : Visibility ,
349
348
) -> Option < trap:: Label < generated:: Item > > {
350
- db. value_ty ( function. into ( ) )
351
- . map ( |type_| const_or_function ( db, name, trap, type_, visibility) )
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) ;
356
+ let sig = db. callable_item_signature ( function. into ( ) ) ;
357
+ let sig = sig. skip_binders ( ) ;
358
+ let params = sig
359
+ . params ( )
360
+ . iter ( )
361
+ . map ( |p| {
362
+ let type_repr = emit_hir_ty ( trap, db, p) ;
363
+ trap. emit ( generated:: Param {
364
+ id : trap:: TrapId :: Star ,
365
+ attrs : vec ! [ ] ,
366
+ type_repr,
367
+ pat : None ,
368
+ } )
369
+ } )
370
+ . collect ( ) ;
371
+
372
+ let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
373
+ let param_list = trap. emit ( generated:: ParamList {
374
+ id : trap:: TrapId :: Star ,
375
+ params,
376
+ self_param : None ,
377
+ } ) ;
378
+ let ret_type = ret_type. map ( |ret_type| {
379
+ trap. emit ( generated:: RetTypeRepr {
380
+ id : trap:: TrapId :: Star ,
381
+ type_repr : Some ( ret_type) ,
382
+ } )
383
+ } ) ;
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
+ )
352
404
}
353
405
354
406
fn emit_const (
@@ -838,96 +890,7 @@ fn emit_visibility(
838
890
} )
839
891
} )
840
892
}
841
- fn const_or_function (
842
- db : & dyn HirDatabase ,
843
- name : & str ,
844
- trap : & mut TrapFile ,
845
- type_ : Binders < Ty > ,
846
- visibility : Visibility ,
847
- ) -> trap:: Label < generated:: Item > {
848
- let type_: & chalk_ir:: Ty < Interner > = type_. skip_binders ( ) ;
849
- match type_. kind ( ra_ap_hir_ty:: Interner ) {
850
- chalk_ir:: TyKind :: FnDef ( fn_def_id, parameters) => {
851
- let callable_def_id =
852
- db. lookup_intern_callable_def ( InternedCallableDefId :: from ( * fn_def_id) ) ;
853
- let data = db. fn_def_datum ( callable_def_id) ;
854
- let sig = ra_ap_hir_ty:: CallableSig :: from_def ( db, * fn_def_id, parameters) ;
855
- let params = sig
856
- . params ( )
857
- . iter ( )
858
- . map ( |p| {
859
- let type_repr = emit_hir_ty ( trap, db, p) ;
860
- trap. emit ( generated:: Param {
861
- id : trap:: TrapId :: Star ,
862
- attrs : vec ! [ ] ,
863
- type_repr,
864
- pat : None ,
865
- } )
866
- } )
867
- . collect ( ) ;
868
893
869
- let ret_type = emit_hir_ty ( trap, db, sig. ret ( ) ) ;
870
- let param_list = trap. emit ( generated:: ParamList {
871
- id : trap:: TrapId :: Star ,
872
- params,
873
- self_param : None ,
874
- } ) ;
875
- let ret_type = ret_type. map ( |ret_type| {
876
- trap. emit ( generated:: RetTypeRepr {
877
- id : trap:: TrapId :: Star ,
878
- type_repr : Some ( ret_type) ,
879
- } )
880
- } ) ;
881
- let name = Some ( trap. emit ( generated:: Name {
882
- id : trap:: TrapId :: Star ,
883
- text : Some ( name. to_owned ( ) ) ,
884
- } ) ) ;
885
- let visibility = emit_visibility ( db, trap, visibility) ;
886
- let callable_def_id = db. lookup_intern_callable_def ( ( * fn_def_id) . into ( ) ) ;
887
- let generic_def_id = GenericDefId :: from_callable ( db. upcast ( ) , callable_def_id) ;
888
- let generic_param_list: Option < trap:: Label < generated:: GenericParamList > > =
889
- emit_generic_param_list ( trap, db, generic_def_id) ;
890
-
891
- trap. emit ( generated:: Function {
892
- id : trap:: TrapId :: Star ,
893
- name,
894
- attrs : vec ! [ ] ,
895
- body : None ,
896
- is_const : false ,
897
- is_default : false ,
898
- visibility,
899
- abi : None ,
900
- is_async : false ,
901
- is_gen : false ,
902
- is_unsafe : matches ! ( data. sig. safety, Safety :: Unsafe ) ,
903
- generic_param_list,
904
- param_list : Some ( param_list) ,
905
- ret_type,
906
- where_clause : None ,
907
- } )
908
- . into ( )
909
- }
910
- _ => {
911
- let type_repr = emit_hir_ty ( trap, db, type_) ;
912
- let name = Some ( trap. emit ( generated:: Name {
913
- id : trap:: TrapId :: Star ,
914
- text : Some ( name. to_owned ( ) ) ,
915
- } ) ) ;
916
- let visibility = emit_visibility ( db, trap, visibility) ;
917
- trap. emit ( generated:: Const {
918
- id : trap:: TrapId :: Star ,
919
- name,
920
- attrs : vec ! [ ] ,
921
- body : None ,
922
- is_const : false ,
923
- is_default : false ,
924
- type_repr,
925
- visibility,
926
- } )
927
- . into ( )
928
- }
929
- }
930
- }
931
894
fn emit_hir_type_bound (
932
895
db : & dyn HirDatabase ,
933
896
trap : & mut TrapFile ,
0 commit comments