@@ -1076,16 +1076,40 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1076
1076
fn lower_assoc_ty_constraint (
1077
1077
& mut self ,
1078
1078
constraint : & AssocTyConstraint ,
1079
- itctx : ImplTraitContext < ' _ , ' hir > ,
1079
+ mut itctx : ImplTraitContext < ' _ , ' hir > ,
1080
1080
) -> hir:: TypeBinding < ' hir > {
1081
1081
debug ! ( "lower_assoc_ty_constraint(constraint={:?}, itctx={:?})" , constraint, itctx) ;
1082
1082
1083
- if let Some ( ref gen_args) = constraint. gen_args {
1084
- self . sess . span_fatal (
1085
- gen_args. span ( ) ,
1086
- "generic associated types in trait paths are currently not implemented" ,
1087
- ) ;
1088
- }
1083
+ // lower generic arguments of identifier in constraint
1084
+ let gen_args = if let Some ( ref gen_args) = constraint. gen_args {
1085
+ let gen_args_ctor = match gen_args {
1086
+ GenericArgs :: AngleBracketed ( ref data) => {
1087
+ self . lower_angle_bracketed_parameter_data (
1088
+ data,
1089
+ ParamMode :: Explicit ,
1090
+ itctx. reborrow ( ) ,
1091
+ )
1092
+ . 0
1093
+ }
1094
+ GenericArgs :: Parenthesized ( ref data) => {
1095
+ let mut err = self . sess . struct_span_err (
1096
+ gen_args. span ( ) ,
1097
+ "parenthesized generic arguments cannot be used in associated type constraints"
1098
+ ) ;
1099
+ // FIXME: try to write a suggestion here
1100
+ err. emit ( ) ;
1101
+ self . lower_angle_bracketed_parameter_data (
1102
+ & data. as_angle_bracketed_args ( ) ,
1103
+ ParamMode :: Explicit ,
1104
+ itctx. reborrow ( ) ,
1105
+ )
1106
+ . 0
1107
+ }
1108
+ } ;
1109
+ self . arena . alloc ( gen_args_ctor. into_generic_args ( & self . arena ) )
1110
+ } else {
1111
+ self . arena . alloc ( hir:: GenericArgs :: none ( ) )
1112
+ } ;
1089
1113
1090
1114
let kind = match constraint. kind {
1091
1115
AssocTyConstraintKind :: Equality { ref ty } => {
@@ -1182,6 +1206,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1182
1206
hir:: TypeBinding {
1183
1207
hir_id : self . lower_node_id ( constraint. id ) ,
1184
1208
ident : constraint. ident ,
1209
+ gen_args,
1185
1210
kind,
1186
1211
span : constraint. span ,
1187
1212
}
0 commit comments