Make a struct for loop labels
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index a33d1d6..1f60d88 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -239,6 +239,8 @@
 fn fold_item_use(&mut self, i: ItemUse) -> ItemUse { fold_item_use(self, i) }
 # [ cfg ( feature = "full" ) ]
 fn fold_item_verbatim(&mut self, i: ItemVerbatim) -> ItemVerbatim { fold_item_verbatim(self, i) }
+# [ cfg ( feature = "full" ) ]
+fn fold_label(&mut self, i: Label) -> Label { fold_label(self, i) }
 
 fn fold_lifetime(&mut self, i: Lifetime) -> Lifetime { fold_lifetime(self, i) }
 
@@ -1065,8 +1067,7 @@
 pub fn fold_expr_for_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprForLoop) -> ExprForLoop {
     ExprForLoop {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        label: (_i . label).map(|it| { _visitor.fold_label(it) }),
         for_token: Token ! [ for ](tokens_helper(_visitor, &(_i . for_token).0)),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
         in_token: Token ! [ in ](tokens_helper(_visitor, &(_i . in_token).0)),
@@ -1140,8 +1141,7 @@
 pub fn fold_expr_loop<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprLoop) -> ExprLoop {
     ExprLoop {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        label: (_i . label).map(|it| { _visitor.fold_label(it) }),
         loop_token: Token ! [ loop ](tokens_helper(_visitor, &(_i . loop_token).0)),
         body: _visitor.fold_block(_i . body),
     }
@@ -1280,8 +1280,7 @@
 pub fn fold_expr_while<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhile) -> ExprWhile {
     ExprWhile {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        label: (_i . label).map(|it| { _visitor.fold_label(it) }),
         while_token: Token ! [ while ](tokens_helper(_visitor, &(_i . while_token).0)),
         cond: Box::new(_visitor.fold_expr(* _i . cond)),
         body: _visitor.fold_block(_i . body),
@@ -1291,8 +1290,7 @@
 pub fn fold_expr_while_let<V: Folder + ?Sized>(_visitor: &mut V, _i: ExprWhileLet) -> ExprWhileLet {
     ExprWhileLet {
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
-        label: (_i . label).map(|it| { _visitor.fold_lifetime(it) }),
-        colon_token: (_i . colon_token).map(|it| { Token ! [ : ](tokens_helper(_visitor, &(it).0)) }),
+        label: (_i . label).map(|it| { _visitor.fold_label(it) }),
         while_token: Token ! [ while ](tokens_helper(_visitor, &(_i . while_token).0)),
         let_token: Token ! [ let ](tokens_helper(_visitor, &(_i . let_token).0)),
         pat: Box::new(_visitor.fold_pat(* _i . pat)),
@@ -1901,6 +1899,13 @@
         tts: _i . tts,
     }
 }
+# [ cfg ( feature = "full" ) ]
+pub fn fold_label<V: Folder + ?Sized>(_visitor: &mut V, _i: Label) -> Label {
+    Label {
+        name: _visitor.fold_lifetime(_i . name),
+        colon_token: Token ! [ : ](tokens_helper(_visitor, &(_i . colon_token).0)),
+    }
+}
 
 pub fn fold_lifetime_def<V: Folder + ?Sized>(_visitor: &mut V, _i: LifetimeDef) -> LifetimeDef {
     LifetimeDef {