Skip to content

Commit 573907f

Browse files
committed
fix "endless range" parsing
add more tests
1 parent c7c50d4 commit 573907f

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

corpus/expressions.txt

+13-1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ a..b;
128128
1..(1);
129129
(1)..1;
130130
(1)..(1);
131+
1..{1};
132+
for i in 1.. {
133+
}
131134

132135
---
133136

@@ -146,7 +149,16 @@ a..b;
146149
(integer_literal))
147150
(range_expression
148151
(parenthesized_expression (integer_literal))
149-
(parenthesized_expression (integer_literal))))
152+
(parenthesized_expression (integer_literal)))
153+
(range_expression
154+
(integer_literal)
155+
(block
156+
(integer_literal)))
157+
(for_expression
158+
(identifier)
159+
(range_expression
160+
(integer_literal))
161+
(block)))
150162

151163
============================================
152164
Assignment expressions

grammar.js

+10-9
Original file line numberDiff line numberDiff line change
@@ -831,15 +831,14 @@ module.exports = grammar({
831831

832832
// Section - Expressions
833833

834-
_expression: $ => choice(
834+
_expression_except_range: $ => choice(
835835
$.unary_expression,
836836
$.reference_expression,
837837
$.try_expression,
838838
$.binary_expression,
839839
$.assignment_expression,
840840
$.compound_assignment_expr,
841841
$.type_cast_expression,
842-
$.range_expression,
843842
$.call_expression,
844843
$.return_expression,
845844
$.yield_expression,
@@ -856,14 +855,19 @@ module.exports = grammar({
856855
$.tuple_expression,
857856
prec(1, $.macro_invocation),
858857
$.unit_expression,
859-
$._expression_ending_with_block,
860858
$.break_expression,
861859
$.continue_expression,
862860
$.index_expression,
863861
$.metavariable,
864862
$.closure_expression,
865863
$.parenthesized_expression,
866-
$.struct_expression
864+
$.struct_expression,
865+
$._expression_ending_with_block,
866+
),
867+
868+
_expression: $ => choice(
869+
$._expression_except_range,
870+
$.range_expression,
867871
),
868872

869873
_expression_ending_with_block: $ => choice(
@@ -921,10 +925,7 @@ module.exports = grammar({
921925
),
922926

923927
range_expression: $ => prec.left(PREC.range, choice(
924-
prec.left(
925-
PREC.range + 1,
926-
seq($._expression, choice('..', '...', '..='), $._expression)
927-
),
928+
seq($._expression, choice('..', '...', '..='), $._expression),
928929
seq($._expression, '..'),
929930
seq('..', $._expression),
930931
'..'
@@ -995,7 +996,7 @@ module.exports = grammar({
995996
),
996997

997998
call_expression: $ => prec(PREC.call, seq(
998-
field('function', $._expression),
999+
field('function', $._expression_except_range),
9991000
field('arguments', $.arguments)
10001001
)),
10011002

0 commit comments

Comments
 (0)