@@ -78,9 +78,15 @@ pub(crate) fn expression_or_cond_pattern_ternary(
7878#[ packrat_parser]
7979pub ( crate ) fn constant_expression ( s : Span ) -> IResult < Span , ConstantExpression > {
8080 alt ( (
81+ map ( terminated ( constant_primary, peek ( one_of ( ",();}:" ) ) ) , |x| {
82+ ConstantExpression :: ConstantPrimary ( Box :: new ( x) )
83+ } ) ,
8184 constant_expression_ternary,
8285 constant_expression_binary,
8386 constant_expression_unary,
87+ map ( constant_inside_expression, |x| {
88+ ConstantExpression :: Inside ( Box :: new ( x) )
89+ } ) ,
8490 map ( constant_primary, |x| {
8591 ConstantExpression :: ConstantPrimary ( Box :: new ( x) )
8692 } ) ,
@@ -133,6 +139,16 @@ pub(crate) fn constant_expression_ternary(s: Span) -> IResult<Span, ConstantExpr
133139 ) )
134140}
135141
142+ #[ recursive_parser]
143+ #[ tracable_parser]
144+ #[ packrat_parser]
145+ pub ( crate ) fn constant_inside_expression ( s : Span ) -> IResult < Span , ConstantInsideExpression > {
146+ let ( s, a) = constant_expression ( s) ?;
147+ let ( s, b) = keyword ( "inside" ) ( s) ?;
148+ let ( s, c) = brace ( open_range_list) ( s) ?;
149+ Ok ( ( s, ConstantInsideExpression { nodes : ( a, b, c) } ) )
150+ }
151+
136152#[ tracable_parser]
137153#[ packrat_parser]
138154pub ( crate ) fn constant_mintypmax_expression ( s : Span ) -> IResult < Span , ConstantMintypmaxExpression > {
0 commit comments