@@ -690,10 +690,9 @@ impl<'a> LoweringContext<'a> {
690
690
TyKind :: ImplicitSelf => {
691
691
hir:: TyPath ( hir:: QPath :: Resolved ( None , P ( hir:: Path {
692
692
def : self . expect_full_def ( t. id ) ,
693
- segments : hir_vec ! [ hir:: PathSegment {
694
- name: keywords:: SelfType . name( ) ,
695
- parameters: hir:: PathParameters :: none( )
696
- } ] ,
693
+ segments : hir_vec ! [
694
+ hir:: PathSegment :: from_name( keywords:: SelfType . name( ) )
695
+ ] ,
697
696
span : t. span ,
698
697
} ) ) )
699
698
}
@@ -914,12 +913,8 @@ impl<'a> LoweringContext<'a> {
914
913
segments : segments. map ( |segment| {
915
914
self . lower_path_segment ( p. span , segment, param_mode, 0 ,
916
915
ParenthesizedGenericArgs :: Err )
917
- } ) . chain ( name. map ( |name| {
918
- hir:: PathSegment {
919
- name,
920
- parameters : hir:: PathParameters :: none ( )
921
- }
922
- } ) ) . collect ( ) ,
916
+ } ) . chain ( name. map ( |name| hir:: PathSegment :: from_name ( name) ) )
917
+ . collect ( ) ,
923
918
span : p. span ,
924
919
}
925
920
}
@@ -940,7 +935,7 @@ impl<'a> LoweringContext<'a> {
940
935
expected_lifetimes : usize ,
941
936
parenthesized_generic_args : ParenthesizedGenericArgs )
942
937
-> hir:: PathSegment {
943
- let mut parameters = if let Some ( ref parameters) = segment. parameters {
938
+ let ( mut parameters, infer_types ) = if let Some ( ref parameters) = segment. parameters {
944
939
let msg = "parenthesized parameters may only be used with a trait" ;
945
940
match * * parameters {
946
941
PathParameters :: AngleBracketed ( ref data) => {
@@ -951,12 +946,12 @@ impl<'a> LoweringContext<'a> {
951
946
ParenthesizedGenericArgs :: Warn => {
952
947
self . sess . buffer_lint ( PARENTHESIZED_PARAMS_IN_TYPES_AND_MODULES ,
953
948
CRATE_NODE_ID , data. span , msg. into ( ) ) ;
954
- hir:: PathParameters :: none ( )
949
+ ( hir:: PathParameters :: none ( ) , true )
955
950
}
956
951
ParenthesizedGenericArgs :: Err => {
957
952
struct_span_err ! ( self . sess, data. span, E0214 , "{}" , msg)
958
953
. span_label ( data. span , "only traits may use parentheses" ) . emit ( ) ;
959
- hir:: PathParameters :: none ( )
954
+ ( hir:: PathParameters :: none ( ) , true )
960
955
}
961
956
}
962
957
}
@@ -970,40 +965,39 @@ impl<'a> LoweringContext<'a> {
970
965
} ) . collect ( ) ;
971
966
}
972
967
973
- hir:: PathSegment {
974
- name : self . lower_ident ( segment. identifier ) ,
968
+ hir:: PathSegment :: new (
969
+ self . lower_ident ( segment. identifier ) ,
975
970
parameters,
976
- }
971
+ infer_types
972
+ )
977
973
}
978
974
979
975
fn lower_angle_bracketed_parameter_data ( & mut self ,
980
976
data : & AngleBracketedParameterData ,
981
977
param_mode : ParamMode )
982
- -> hir:: PathParameters {
978
+ -> ( hir:: PathParameters , bool ) {
983
979
let & AngleBracketedParameterData { ref lifetimes, ref types, ref bindings, .. } = data;
984
- hir:: PathParameters {
980
+ ( hir:: PathParameters {
985
981
lifetimes : self . lower_lifetimes ( lifetimes) ,
986
982
types : types. iter ( ) . map ( |ty| self . lower_ty ( ty) ) . collect ( ) ,
987
- infer_types : types. is_empty ( ) && param_mode == ParamMode :: Optional ,
988
983
bindings : bindings. iter ( ) . map ( |b| self . lower_ty_binding ( b) ) . collect ( ) ,
989
984
parenthesized : false ,
990
- }
985
+ } , types . is_empty ( ) && param_mode == ParamMode :: Optional )
991
986
}
992
987
993
988
fn lower_parenthesized_parameter_data ( & mut self ,
994
989
data : & ParenthesizedParameterData )
995
- -> hir:: PathParameters {
990
+ -> ( hir:: PathParameters , bool ) {
996
991
let & ParenthesizedParameterData { ref inputs, ref output, span } = data;
997
992
let inputs = inputs. iter ( ) . map ( |ty| self . lower_ty ( ty) ) . collect ( ) ;
998
993
let mk_tup = |this : & mut Self , tys, span| {
999
994
let LoweredNodeId { node_id, hir_id } = this. next_id ( ) ;
1000
995
P ( hir:: Ty { node : hir:: TyTup ( tys) , id : node_id, hir_id, span } )
1001
996
} ;
1002
997
1003
- hir:: PathParameters {
998
+ ( hir:: PathParameters {
1004
999
lifetimes : hir:: HirVec :: new ( ) ,
1005
1000
types : hir_vec ! [ mk_tup( self , inputs, span) ] ,
1006
- infer_types : false ,
1007
1001
bindings : hir_vec ! [ hir:: TypeBinding {
1008
1002
id: self . next_id( ) . node_id,
1009
1003
name: Symbol :: intern( FN_OUTPUT_NAME ) ,
@@ -1012,7 +1006,7 @@ impl<'a> LoweringContext<'a> {
1012
1006
span: output. as_ref( ) . map_or( span, |ty| ty. span) ,
1013
1007
} ] ,
1014
1008
parenthesized : true ,
1015
- }
1009
+ } , false )
1016
1010
}
1017
1011
1018
1012
fn lower_local ( & mut self , l : & Local ) -> P < hir:: Local > {
0 commit comments