@@ -415,16 +415,16 @@ string :: { Lit Span }
415
415
qual_path(segs) :: { Spanned (QSelf Span, Path Span) }
416
416
: ' <' qual_path_suf(segs) { let Spanned x _ = $2 in Spanned x ($1 # $2) }
417
417
| lt_ty_qual_path as ty_path ' >' ' ::' segs {
418
- let segs = segments $3 <> unspan $6
419
- in Spanned (QSelf (unspan $1) (length (segments $3)), $3{ segments = segs } ) ($1 # $>)
418
+ let Path g segsTy x = $3
419
+ in Spanned (QSelf (unspan $1) (length segsTy), Path g (segsTy <> unspan $6) x ) ($1 # $>)
420
420
}
421
421
422
422
-- Basically a qualified path, but ignoring the very first ' <' token
423
423
qual_path_suf(segs) :: { Spanned (QSelf Span, Path Span) }
424
424
: ty ' >' ' ::' segs { Spanned (QSelf $1 0, Path False (unspan $4) (spanOf $4)) ($1 # $>) }
425
425
| ty as ty_path ' >' ' ::' segs {
426
- let segs = segments $3 <> unspan $6
427
- in Spanned (QSelf $1 (length (segments $3)), $3{ segments = segs } ) ($1 # $>)
426
+ let Path g segsTy x = $3
427
+ in Spanned (QSelf $1 (length segsTy), Path g (segsTy <> unspan $6) x ) ($1 # $>)
428
428
}
429
429
430
430
-- Usually qual_path_suf is for... type paths! This consumes these but with a starting ' <<' token.
@@ -507,9 +507,10 @@ mod_path :: { Path Span }
507
507
: ntPath { $1 }
508
508
| self_or_ident { Path False [(unspan $1 , NoParameters mempty)] (spanOf $1 ) }
509
509
| ' ::' self_or_ident { Path True [(unspan $2 , NoParameters mempty)] ($1 # $>) }
510
- | mod_path ' ::' ident
511
- { Path (global $1 ) (segments $1 |> (unspan $3 , NoParameters mempty)) ($1 # $>) }
512
-
510
+ | mod_path ' ::' ident {
511
+ let Path g segs _ = $1
512
+ in Path g (segs |> (unspan $3 , NoParameters mempty)) ($1 # $>)
513
+ }
513
514
514
515
-----------
515
516
-- Types --
@@ -1245,19 +1246,19 @@ gen_item(vis) :: { Item Span }
1245
1246
| many(outer_attribute) vis const ident ' :' ty ' =' expr ' ;'
1246
1247
{ ConstItem $1 (unspan $2) (unspan $4) $6 $8 ($1 # $2 # $3 # $>) }
1247
1248
| many(outer_attribute) vis type ident generics where_clause ' =' ty ' ;'
1248
- { TyAlias $1 (unspan $2) (unspan $4) $8 $5{ whereClause = $6 } ($1 # $2 # $3 # $>) }
1249
+ { TyAlias $1 (unspan $2) (unspan $4) $8 ($5 `withWhere` $6) ($1 # $2 # $3 # $>) }
1249
1250
| many(outer_attribute) vis use view_path ' ;'
1250
1251
{ Use $1 (unspan $2) $4 ($1 # $2 # $3 # $>) }
1251
1252
| many(outer_attribute) vis safety extern crate ident ' ;'
1252
1253
{% noSafety $3 (ExternCrate $1 (unspan $2) (unspan $6) Nothing ($1 # $2 # $4 # $>)) }
1253
1254
| many(outer_attribute) vis safety extern crate ident as ident ' ;'
1254
1255
{% noSafety $3 (ExternCrate $1 (unspan $2) (unspan $8) (Just (unspan $6)) ($1 # $2 # $4 # $>)) }
1255
1256
| many(outer_attribute) vis const safety fn ident generics fn_decl(arg_named) where_clause inner_attrs_block
1256
- { Fn ($1 ++ fst $>) (unspan $2) (unspan $6) $8 (unspan $4) Const Rust $7{ whereClause = $9 } (snd $>) ($1 # $2 # $3 # snd $>) }
1257
+ { Fn ($1 ++ fst $>) (unspan $2) (unspan $6) $8 (unspan $4) Const Rust ($7 `withWhere` $9) (snd $>) ($1 # $2 # $3 # snd $>) }
1257
1258
| many(outer_attribute) vis safety extern abi fn ident generics fn_decl(arg_named) where_clause inner_attrs_block
1258
- { Fn ($1 ++ fst $>) (unspan $2) (unspan $7) $9 (unspan $3) NotConst $5 $8{ whereClause = $10 } (snd $>) ($1 # $2 # $3 # $4 # snd $>) }
1259
+ { Fn ($1 ++ fst $>) (unspan $2) (unspan $7) $9 (unspan $3) NotConst $5 ($8 `withWhere` $10) (snd $>) ($1 # $2 # $3 # $4 # snd $>) }
1259
1260
| many(outer_attribute) vis safety fn ident generics fn_decl(arg_named) where_clause inner_attrs_block
1260
- { Fn ($1 ++ fst $>) (unspan $2) (unspan $5) $7 (unspan $3) NotConst Rust $6{ whereClause = $8 } (snd $>) ($1 # $2 # $3 # $4 # snd $>) }
1261
+ { Fn ($1 ++ fst $>) (unspan $2) (unspan $5) $7 (unspan $3) NotConst Rust ($6 `withWhere` $8) (snd $>) ($1 # $2 # $3 # $4 # snd $>) }
1261
1262
| many(outer_attribute) vis mod ident ' ;'
1262
1263
{ Mod $1 (unspan $2) (unspan $4) Nothing ($1 # $2 # $3 # $>) }
1263
1264
| many(outer_attribute) vis mod ident ' {' many(mod_item) ' }'
@@ -1269,31 +1270,31 @@ gen_item(vis) :: { Item Span }
1269
1270
| many(outer_attribute) vis safety extern abi ' {' inner_attrs many(foreign_item) ' }'
1270
1271
{% noSafety $3 (ForeignMod ($1 ++ toList $7) (unspan $2) $5 $8 ($1 # $2 # $4 # $>)) }
1271
1272
| many(outer_attribute) vis struct ident generics struct_decl_args
1272
- { StructItem $1 (unspan $2) (unspan $4) (snd $6) $5{ whereClause = fst $6 } ($1 # $2 # $3 # snd $>) }
1273
+ { StructItem $1 (unspan $2) (unspan $4) (snd $6) ($5 `withWhere` fst $6) ($1 # $2 # $3 # snd $>) }
1273
1274
| many(outer_attribute) vis union ident generics struct_decl_args
1274
- { Union $1 (unspan $2) (unspan $4) (snd $6) $5{ whereClause = fst $6 } ($1 # $2 # $3 # snd $>) }
1275
+ { Union $1 (unspan $2) (unspan $4) (snd $6) ($5 `withWhere` fst $6) ($1 # $2 # $3 # snd $>) }
1275
1276
| many(outer_attribute) vis enum ident generics where_clause ' {' sep_byT(enum_def,' ,' ) ' }'
1276
- { Enum $1 (unspan $2) (unspan $4) $8 $5{ whereClause = $6 } ($1 # $2 # $3 # $>) }
1277
+ { Enum $1 (unspan $2) (unspan $4) $8 ($5 `withWhere` $6) ($1 # $2 # $3 # $>) }
1277
1278
| many(outer_attribute) vis safety trait ident generics ' :' sep_by1T(ty_param_bound,' +' ) where_clause ' {' many(trait_item) ' }'
1278
- { Trait $1 (unspan $2) (unspan $5) (unspan $3) $6{ whereClause = $9 } (toList $8) $11 ($1 # $2 # $3 # $4 # $>) }
1279
+ { Trait $1 (unspan $2) (unspan $5) (unspan $3) ($6 `withWhere` $9) (toList $8) $11 ($1 # $2 # $3 # $4 # $>) }
1279
1280
| many(outer_attribute) vis safety trait ident generics where_clause ' {' many(trait_item) ' }'
1280
- { Trait $1 (unspan $2) (unspan $5) (unspan $3) $6{ whereClause = $7 } [] $9 ($1 # $2 # $3 # $4 # $>) }
1281
+ { Trait $1 (unspan $2) (unspan $5) (unspan $3) ($6 `withWhere` $7) [] $9 ($1 # $2 # $3 # $4 # $>) }
1281
1282
| many(outer_attribute) vis safety impl generics ty_prim where_clause ' {' impl_items ' }'
1282
- { Impl ($1 ++ fst $9) (unspan $2) Final (unspan $3) Positive $5{ whereClause = $7 } Nothing $6 (snd $9) ($1 # $2 # $3 # $4 # $5 # $>) }
1283
+ { Impl ($1 ++ fst $9) (unspan $2) Final (unspan $3) Positive ($5 `withWhere` $7) Nothing $6 (snd $9) ($1 # $2 # $3 # $4 # $5 # $>) }
1283
1284
| many(outer_attribute) vis default safety impl generics ty_prim where_clause ' {' impl_items ' }'
1284
- { Impl ($1 ++ fst $10) (unspan $2) Default (unspan $4) Positive $6{ whereClause = $8 } Nothing $7 (snd $10) ($1 # $2 # $3 # $4 # $5 # $>) }
1285
+ { Impl ($1 ++ fst $10) (unspan $2) Default (unspan $4) Positive ($6 `withWhere` $8) Nothing $7 (snd $10) ($1 # $2 # $3 # $4 # $5 # $>) }
1285
1286
| many(outer_attribute) vis safety impl generics ' (' ty_no_plus ' )' where_clause ' {' impl_items ' }'
1286
- { Impl ($1 ++ fst $11) (unspan $2) Final (unspan $3) Positive $5{ whereClause = $9 } Nothing (ParenTy $7 ($6 # $8)) (snd $11) ($1 # $2 # $3 # $4 # $5 # $>) }
1287
+ { Impl ($1 ++ fst $11) (unspan $2) Final (unspan $3) Positive ($5 `withWhere` $9) Nothing (ParenTy $7 ($6 # $8)) (snd $11) ($1 # $2 # $3 # $4 # $5 # $>) }
1287
1288
| many(outer_attribute) vis default safety impl generics ' (' ty_no_plus ' )' where_clause ' {' impl_items ' }'
1288
- { Impl ($1 ++ fst $12) (unspan $2) Default (unspan $4) Positive $6{ whereClause = $10 } Nothing (ParenTy $8 ($7 # $9)) (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1289
+ { Impl ($1 ++ fst $12) (unspan $2) Default (unspan $4) Positive ($6 `withWhere` $10) Nothing (ParenTy $8 ($7 # $9)) (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1289
1290
| many(outer_attribute) vis safety impl generics ' !' trait_ref for ty where_clause ' {' impl_items ' }'
1290
- { Impl ($1 ++ fst $12) (unspan $2) Final (unspan $3) Negative $5{ whereClause = $10 } (Just $7) $9 (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1291
+ { Impl ($1 ++ fst $12) (unspan $2) Final (unspan $3) Negative ($5 `withWhere` $10) (Just $7) $9 (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1291
1292
| many(outer_attribute) vis default safety impl generics ' !' trait_ref for ty where_clause ' {' impl_items ' }'
1292
- { Impl ($1 ++ fst $13) (unspan $2) Default (unspan $4) Negative $6{ whereClause = $11 } (Just $8) $10 (snd $13) ($1 # $2 # $3 # $4 # $5 # $>) }
1293
+ { Impl ($1 ++ fst $13) (unspan $2) Default (unspan $4) Negative ($6 `withWhere` $11) (Just $8) $10 (snd $13) ($1 # $2 # $3 # $4 # $5 # $>) }
1293
1294
| many(outer_attribute) vis safety impl generics trait_ref for ty where_clause ' {' impl_items ' }'
1294
- { Impl ($1 ++ fst $11) (unspan $2) Final (unspan $3) Positive $5{ whereClause = $9 } (Just $6) $8 (snd $11) ($1 # $2 # $3 # $4 # $5 # $>) }
1295
+ { Impl ($1 ++ fst $11) (unspan $2) Final (unspan $3) Positive ($5 `withWhere` $9) (Just $6) $8 (snd $11) ($1 # $2 # $3 # $4 # $5 # $>) }
1295
1296
| many(outer_attribute) vis default safety impl generics trait_ref for ty where_clause ' {' impl_items ' }'
1296
- { Impl ($1 ++ fst $12) (unspan $2) Default (unspan $4) Positive $6{ whereClause = $10 } (Just $7) $9 (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1297
+ { Impl ($1 ++ fst $12) (unspan $2) Default (unspan $4) Positive ($6 `withWhere` $10) (Just $7) $9 (snd $12) ($1 # $2 # $3 # $4 # $5 # $>) }
1297
1298
| many(outer_attribute) vis safety impl generics trait_ref for ' ..' ' {' ' }'
1298
1299
{% case $5 of
1299
1300
Generics [] [] _ _ -> pure $ DefaultImpl $1 (unspan $2) (unspan $3) $6 ($1 # $2 # $3 # $4 # $>)
@@ -1323,7 +1324,7 @@ foreign_item :: { ForeignItem Span }
1323
1324
| many(outer_attribute) vis static mut ident ' :' ty ' ;'
1324
1325
{ ForeignStatic $1 (unspan $2) (unspan $5) $7 Mutable ($1 # $2 # $>) }
1325
1326
| many(outer_attribute) vis fn ident generics fn_decl(arg_named) where_clause ' ;'
1326
- { ForeignFn $1 (unspan $2) (unspan $4) $6 $5{ whereClause = $7 } ($1 # $2 # $>) }
1327
+ { ForeignFn $1 (unspan $2) (unspan $4) $6 ($5 `withWhere` $7) ($1 # $2 # $>) }
1327
1328
1328
1329
-- parse_generics
1329
1330
-- Leaves the WhereClause empty
@@ -1385,10 +1386,10 @@ impl_item :: { ImplItem Span }
1385
1386
| many(outer_attribute) vis def const ident ' :' ty ' =' expr ' ;' { ConstI $1 (unspan $2) (unspan $3) (unspan $5) $7 $9 ($1 # $2 # $3 # $4 # $>) }
1386
1387
| many(outer_attribute) def mod_mac { MacroI $1 (unspan $2) $3 ($1 # $2 # $>) }
1387
1388
| many(outer_attribute) vis def const safety fn ident generics fn_decl_with_self_named where_clause inner_attrs_block
1388
- { let methodSig = MethodSig (unspan $5) Const Rust $9 $8{ whereClause = $10 }
1389
+ { let methodSig = MethodSig (unspan $5) Const Rust $9 ($8 `withWhere` $10)
1389
1390
in MethodI ($1 ++ fst $>) (unspan $2) (unspan $3) (unspan $7) methodSig (snd $>) ($1 # $2 # $3 # $4 # snd $>) }
1390
1391
| many(outer_attribute) vis def safety ext_abi fn ident generics fn_decl_with_self_named where_clause inner_attrs_block
1391
- { let methodSig = MethodSig (unspan $4) NotConst (unspan $5) $9 $8{ whereClause = $10 }
1392
+ { let methodSig = MethodSig (unspan $4) NotConst (unspan $5) $9 ($8 `withWhere` $10)
1392
1393
in MethodI ($1 ++ fst $>) (unspan $2) (unspan $3) (unspan $7) methodSig (snd $>) ($1 # $2 # $3 # $4 # $5 # $6 # snd $>) }
1393
1394
1394
1395
trait_item :: { TraitItem Span }
@@ -1402,10 +1403,10 @@ trait_item :: { TraitItem Span }
1402
1403
| many(outer_attribute) type ident ' :' sep_by1T(ty_param_bound_mod,' +' ) ' =' ty ' ;'
1403
1404
{ TypeT $1 (unspan $3) (toList $5) (Just $7) ($1 # $2 # $>) }
1404
1405
| many(outer_attribute) safety ext_abi fn ident generics fn_decl_with_self_general where_clause ' ;'
1405
- { let methodSig = MethodSig (unspan $2) NotConst (unspan $3) $7 $6{ whereClause = $8 }
1406
+ { let methodSig = MethodSig (unspan $2) NotConst (unspan $3) $7 ($6 `withWhere` $8)
1406
1407
in MethodT $1 (unspan $5) methodSig Nothing ($1 # $2 # $3 # $4 # $>) }
1407
1408
| many(outer_attribute) safety ext_abi fn ident generics fn_decl_with_self_general where_clause inner_attrs_block
1408
- { let methodSig = MethodSig (unspan $2) NotConst (unspan $3) $7 $6{ whereClause = $8 }
1409
+ { let methodSig = MethodSig (unspan $2) NotConst (unspan $3) $7 ($6 `withWhere` $8)
1409
1410
in MethodT ($1 ++ fst $>) (unspan $5) methodSig (Just (snd $>)) ($1 # $2 # $3 # $4 # snd $>) }
1410
1411
1411
1412
safety :: { Spanned Unsafety }
@@ -1708,6 +1709,10 @@ noVis :: Spanned (Visibility Span) -> a -> P a
1708
1709
noVis (Spanned InheritedV _) x = pure x
1709
1710
noVis _ _ = fail " visibility is not allowed here"
1710
1711
1712
+ -- | Fill in the where clause in a generic
1713
+ withWhere :: Generics a -> WhereClause a -> Generics a
1714
+ withWhere (Generics l t _ x) w = Generics l t w x
1715
+
1711
1716
-- | Return the second argument, as long as the safety is ' Normal'
1712
1717
noSafety :: Spanned Unsafety -> a -> P a
1713
1718
noSafety (Spanned Normal _) x = pure x
0 commit comments