@@ -710,6 +710,7 @@ A *placeholder* may occur in circumstances where a type or const value is not re
710710[mut - ptr- type ]: #mut - ptr- type
711711[fn - type ]: #fn - type
712712[dyn - trait - type ]: #dyn - trait - type
713+ [pattern- type ]: #pattern- type
713714
714715> type → \
715716> & nbsp;& nbsp ;& nbsp ;& nbsp ;& nbsp ; * [basic - type ]* \
@@ -722,6 +723,7 @@ A *placeholder* may occur in circumstances where a type or const value is not re
722723> & nbsp ;& nbsp ; | * [mut - ptr - type ]* \
723724> & nbsp ;& nbsp ; | * [fn - type ]* \
724725> & nbsp ;& nbsp ; | * [dyn - trait - type ]* \
726+ > & nbsp ;& nbsp ; | * [pattern - type ]* \
725727> & nbsp ;& nbsp ; | * [path ]* \
726728> & nbsp ;& nbsp ; | * [backref ]*
727729
@@ -830,6 +832,23 @@ Remaining primitives are encoded as a crate production, e.g. `C4f128`.
830832[fn - sig ]: #fn - sig
831833[abi ]: #abi
832834
835+ * `W ` — A [pattern - type ][pattern - tpye ] `u32 is 0 .. 100 `.
836+ > <span id = " pattern-type" >pattern - type </ span > → `W ` * [pattern - kind ]*
837+ >
838+ > <span id = " pattern-kind" >pattern - kind </ span > → \
839+ > & nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; * [range - pattern - kind ]* \
840+ > & nbsp ;& nbsp ; * [or - pattern - kind ]*
841+ >
842+ > <span id = " range-pattern-kind" >range - pattern - kind </ span > → `R ` * [const ]* * [const ]*
843+ >
844+ > <span id = " or-pattern-kind" >or - pattern - kind </ span > → `O ` * [pattern - kind ]* `E `
845+
846+ While or patterns can be nested in theory , in practice this does not happen and they are instead flattened .
847+
848+ Range patterns have a start and end constant that are both included in the range .
849+ The end must be larger than the start (there can be no wraparound ). To emulate wraparound ,
850+ you need to use an or pattern of the two ranges to the upper limit and from the lower limit.
851+
833852* `D ` — A [trait object][reference- trait - object] `dyn Trait <Assoc = X > + Send + 'a`.
834853
835854 > <span id= "dyn - trait - type ">dyn - trait - type </ span> → `D ` * [dyn - bounds]* * [lifetime]*
@@ -1139,6 +1158,7 @@ The following is a summary of all of the productions of the symbol grammar.
11391158> & nbsp ;& nbsp ; | * [mut - ptr - type ]* \
11401159> & nbsp ;& nbsp ; | * [fn - type ]* \
11411160> & nbsp ;& nbsp ; | * [dyn - trait - type ]* \
1161+ > & nbsp ;& nbsp ; | * [pattern - type ]* \
11421162> & nbsp ;& nbsp ; | * [path ]* \
11431163> & nbsp ;& nbsp ; | * [backref ]*
11441164>
@@ -1152,6 +1172,14 @@ The following is a summary of all of the productions of the symbol grammar.
11521172> [mut - ptr - type ] → `O ` * [type ]* \
11531173> [fn - type ] → `F ` * [fn - sig ]* \
11541174> [dyn - trait - type ] → `D ` * [dyn - bounds ]* * [lifetime ]*
1175+ > [pattern - type ] → `W ` * [pattern - kind ]*
1176+ >
1177+ > [pattern - kind ] → \
1178+ > & nbsp ;& nbsp ;& nbsp ;& nbsp ;& nbsp ; * [range - pattern - kind ]* \
1179+ > & nbsp ;& nbsp ; * [or - pattern - kind ]*
1180+ >
1181+ > [range - pattern - kind ] -> `R ` * [const ]* * [const ]* \
1182+ > [or - pattern - kind ] -> `O ` * [pattern - kind ]* `E ` \
11551183>
11561184> [namespace ] → * [lower ]* | * [upper ]*
11571185>
0 commit comments