@@ -143,8 +143,8 @@ macro_rules! __parse_ensure {
143143 $crate:: __parse_ensure!( 0 $stack $bail ( $( $fuel) * ) { ( $( $buf) * $neg) $( $parse) * } ( $( $rest) * ) $( $rest) * )
144144 } ;
145145
146- ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $let: tt $( $dup: tt) * ) let $( | ) ? $ ( $pat : pat ) |+ = $ ( $rest: tt) * ) => {
147- $crate:: __parse_ensure!( 0 $stack $bail ( $( $fuel) * ) { ( $( $buf) * $let $ ( $pat ) |+ = ) $( $parse) * } ( $( $rest) * ) $( $rest) * )
146+ ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $let: tt $( $dup: tt) * ) let $( $rest: tt) * ) => {
147+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $let) $( $parse) * } ( $( $rest) * ) $( $rest) * )
148148 } ;
149149
150150 ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $life: tt $colon: tt $( $dup: tt) * ) $label: lifetime : $( $rest: tt) * ) => {
@@ -181,8 +181,8 @@ macro_rules! __parse_ensure {
181181 $crate:: __parse_ensure!( 0 ( cond $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $while) $( $parse) * } ( $( $rest) * ) $( $rest) * )
182182 } ;
183183
184- ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $for: tt $( $dup: tt) * ) for $( | ) ? $ ( $pat : pat ) |+ in $ ( $rest: tt) * ) => {
185- $crate:: __parse_ensure!( 0 ( cond $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $for $ ( $pat ) |+ in ) $( $parse) * } ( $( $rest) * ) $( $rest) * )
184+ ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $for: tt $( $dup: tt) * ) for $( $rest: tt) * ) => {
185+ $crate:: __parse_ensure!( pat ( cond $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $for) $( $parse) * } ( $( $rest) * ) $( $rest) * )
186186 } ;
187187
188188 ( atom ( cond $stack: tt) $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $brace: tt $( $dup: tt) * ) { $( $block: tt) * } $( $rest: tt) * ) => {
@@ -238,15 +238,15 @@ macro_rules! __parse_ensure {
238238 // path expressions
239239
240240 ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $colons: tt $( $dup: tt) * ) :: $ident: ident $( $rest: tt) * ) => {
241- $crate:: __parse_ensure!( epath $stack $bail ( $( $fuel) * ) { ( $( $buf) * $colons $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
241+ $crate:: __parse_ensure!( epath ( atom $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $colons $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
242242 } ;
243243
244244 ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } $dup: tt $ident: ident $( $rest: tt) * ) => {
245- $crate:: __parse_ensure!( epath $stack $bail ( $( $fuel) * ) { ( $( $buf) * $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
245+ $crate:: __parse_ensure!( epath ( atom $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
246246 } ;
247247
248248 ( 0 $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $langle: tt $( $dup: tt) * ) < $( $rest: tt) * ) => {
249- $crate:: __parse_ensure!( type ( qpath ( epath $stack) ) $bail ( $( $fuel) * ) { ( $( $buf) * $langle) $( $parse) * } ( $( $rest) * ) $( $rest) * )
249+ $crate:: __parse_ensure!( type ( qpath ( epath ( atom $stack) ) ) $bail ( $( $fuel) * ) { ( $( $buf) * $langle) $( $parse) * } ( $( $rest) * ) $( $rest) * )
250250 } ;
251251
252252 ( epath $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $colons: tt $langle: tt $( $dup: tt) * ) :: < $( $rest: tt) * ) => {
@@ -261,20 +261,20 @@ macro_rules! __parse_ensure {
261261 $crate:: __parse_ensure!( epath $stack $bail ( $( $fuel) * ) { ( $( $buf) * $colons $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
262262 } ;
263263
264- ( epath $ stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! ( $( $mac: tt) * ) $( $rest: tt) * ) => {
265- $crate:: __parse_ensure!( atom $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
264+ ( epath ( $pop : ident $ stack: tt) $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! ( $( $mac: tt) * ) $( $rest: tt) * ) => {
265+ $crate:: __parse_ensure!( $pop $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
266266 } ;
267267
268- ( epath $ stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! [ $( $mac: tt) * ] $( $rest: tt) * ) => {
269- $crate:: __parse_ensure!( atom $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
268+ ( epath ( $pop : ident $ stack: tt) $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! [ $( $mac: tt) * ] $( $rest: tt) * ) => {
269+ $crate:: __parse_ensure!( $pop $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
270270 } ;
271271
272- ( epath $ stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! { $( $mac: tt) * } $( $rest: tt) * ) => {
273- $crate:: __parse_ensure!( atom $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
272+ ( epath ( $pop : ident $ stack: tt) $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bang: tt $args: tt $( $dup: tt) * ) ! { $( $mac: tt) * } $( $rest: tt) * ) => {
273+ $crate:: __parse_ensure!( $pop $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bang $args) $( $parse) * } ( $( $rest) * ) $( $rest) * )
274274 } ;
275275
276- ( epath $ stack: tt $bail: tt ( ~$( $fuel: tt) * ) $parse: tt $dup: tt $( $rest: tt) * ) => {
277- $crate:: __parse_ensure!( atom $stack $bail ( $( $fuel) * ) $parse $dup $( $rest) * )
276+ ( epath ( $pop : ident $ stack: tt) $bail: tt ( ~$( $fuel: tt) * ) $parse: tt $dup: tt $( $rest: tt) * ) => {
277+ $crate:: __parse_ensure!( $pop $stack $bail ( $( $fuel) * ) $parse $dup $( $rest) * )
278278 } ;
279279
280280 // trailer expressions
@@ -537,6 +537,80 @@ macro_rules! __parse_ensure {
537537 $crate:: __parse_ensure!( $pop $stack $bail ( $( $fuel) * ) { ( $( $buf) * >) $( $parse) * } ( > $( $rest) * ) > $( $rest) * )
538538 } ;
539539
540+ // patterns
541+
542+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $pipe: tt $( $dup: tt) * ) | $( $rest: tt) * ) => {
543+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $pipe) $( $parse) * } ( $( $rest) * ) $( $rest) * )
544+ } ;
545+
546+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $eq: tt $( $dup: tt) * ) = $( $rest: tt) * ) => {
547+ $crate:: __parse_ensure!( 0 $stack $bail ( $( $fuel) * ) { ( $( $buf) * $eq) $( $parse) * } ( $( $rest) * ) $( $rest) * )
548+ } ;
549+
550+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $in: tt $( $dup: tt) * ) in $( $rest: tt) * ) => {
551+ $crate:: __parse_ensure!( 0 $stack $bail ( $( $fuel) * ) { ( $( $buf) * $in) $( $parse) * } ( $( $rest) * ) $( $rest) * )
552+ } ;
553+
554+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $ref: tt $( $dup: tt) * ) ref $( $rest: tt) * ) => {
555+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $ref) $( $parse) * } ( $( $rest) * ) $( $rest) * )
556+ } ;
557+
558+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $mut: tt $( $dup: tt) * ) mut $( $rest: tt) * ) => {
559+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $mut) $( $parse) * } ( $( $rest) * ) $( $rest) * )
560+ } ;
561+
562+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $at: tt $( $dup: tt) * ) @ $( $rest: tt) * ) => {
563+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $at) $( $parse) * } ( $( $rest) * ) $( $rest) * )
564+ } ;
565+
566+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } $dup: tt $lit: literal $( $rest: tt) * ) => {
567+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $lit) $( $parse) * } ( $( $rest) * ) $( $rest) * )
568+ } ;
569+
570+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $range: tt $( $dup: tt) * ) .. $( $rest: tt) * ) => {
571+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $range) $( $parse) * } ( $( $rest) * ) $( $rest) * )
572+ } ;
573+
574+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $range: tt $( $dup: tt) * ) ..= $( $rest: tt) * ) => {
575+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $range) $( $parse) * } ( $( $rest) * ) $( $rest) * )
576+ } ;
577+
578+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $and: tt $( $dup: tt) * ) & $( $rest: tt) * ) => {
579+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $and) $( $parse) * } ( $( $rest) * ) $( $rest) * )
580+ } ;
581+
582+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $andand: tt $( $dup: tt) * ) && $( $rest: tt) * ) => {
583+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $andand) $( $parse) * } ( $( $rest) * ) $( $rest) * )
584+ } ;
585+
586+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $paren: tt $( $dup: tt) * ) ( $( $content: tt) * ) $( $rest: tt) * ) => {
587+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $paren) $( $parse) * } ( $( $rest) * ) $( $rest) * )
588+ } ;
589+
590+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $bracket: tt $( $dup: tt) * ) [ $( $content: tt) * ] $( $rest: tt) * ) => {
591+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $bracket) $( $parse) * } ( $( $rest) * ) $( $rest) * )
592+ } ;
593+
594+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $brace: tt $( $dup: tt) * ) { $( $content: tt) * } $( $rest: tt) * ) => {
595+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $brace) $( $parse) * } ( $( $rest) * ) $( $rest) * )
596+ } ;
597+
598+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $wild: tt $( $dup: tt) * ) _ $( $rest: tt) * ) => {
599+ $crate:: __parse_ensure!( pat $stack $bail ( $( $fuel) * ) { ( $( $buf) * $wild) $( $parse) * } ( $( $rest) * ) $( $rest) * )
600+ } ;
601+
602+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $colons: tt $( $dup: tt) * ) :: $ident: ident $( $rest: tt) * ) => {
603+ $crate:: __parse_ensure!( epath ( pat $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $colons $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
604+ } ;
605+
606+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } $dup: tt $ident: ident $( $rest: tt) * ) => {
607+ $crate:: __parse_ensure!( epath ( pat $stack) $bail ( $( $fuel) * ) { ( $( $buf) * $ident) $( $parse) * } ( $( $rest) * ) $( $rest) * )
608+ } ;
609+
610+ ( pat $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $langle: tt $( $dup: tt) * ) < $( $rest: tt) * ) => {
611+ $crate:: __parse_ensure!( type ( qpath ( epath ( pat $stack) ) ) $bail ( $( $fuel) * ) { ( $( $buf) * $langle) $( $parse) * } ( $( $rest) * ) $( $rest) * )
612+ } ;
613+
540614 // high precedence binary operators
541615
542616 ( atom $stack: tt $bail: tt ( ~$( $fuel: tt) * ) { ( $( $buf: tt) * ) $( $parse: tt) * } ( $add: tt $( $dup: tt) * ) + $( $rest: tt) * ) => {
0 commit comments