From 99c6922d407ca9c3c1a3b7c10ac480985c3e9d47 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Fri, 17 Nov 2023 06:12:03 -0500 Subject: [PATCH] feat: support labeled blocks --- grammar.js | 17 +++++++++-------- test/corpus/expressions.txt | 14 +++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/grammar.js b/grammar.js index e63e119..f5632c2 100644 --- a/grammar.js +++ b/grammar.js @@ -459,11 +459,11 @@ module.exports = grammar({ $.extern_modifier, )), - where_clause: $ => seq( + where_clause: $ => prec.right(seq( 'where', sepBy1(',', $.where_predicate), optional(','), - ), + )), where_predicate: $ => seq( field('left', choice( @@ -1206,20 +1206,20 @@ module.exports = grammar({ ), while_expression: $ => seq( - optional(seq($.loop_label, ':')), + optional(seq($.label, ':')), 'while', field('condition', $._condition), field('body', $.block), ), loop_expression: $ => seq( - optional(seq($.loop_label, ':')), + optional(seq($.label, ':')), 'loop', field('body', $.block), ), for_expression: $ => seq( - optional(seq($.loop_label, ':')), + optional(seq($.label, ':')), 'for', field('pattern', $._pattern), 'in', @@ -1254,11 +1254,11 @@ module.exports = grammar({ '|', ), - loop_label: $ => seq('\'', $.identifier), + label: $ => seq('\'', $.identifier), - break_expression: $ => prec.left(seq('break', optional($.loop_label), optional($._expression))), + break_expression: $ => prec.left(seq('break', optional($.label), optional($._expression))), - continue_expression: $ => prec.left(seq('continue', optional($.loop_label))), + continue_expression: $ => prec.left(seq('continue', optional($.label))), index_expression: $ => prec(PREC.call, seq($._expression, '[', $._expression, ']')), @@ -1289,6 +1289,7 @@ module.exports = grammar({ ), block: $ => seq( + optional(seq($.label, ':')), '{', repeat($._statement), optional($._expression), diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index 4cc6766..771effc 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -837,17 +837,17 @@ Loop expressions (source_file (expression_statement (loop_expression - (loop_label + (label (identifier)) (block (expression_statement (loop_expression - (loop_label + (label (identifier)) (block (expression_statement (break_expression - (loop_label + (label (identifier)))) (expression_statement (break_expression @@ -899,7 +899,7 @@ for i in 0..256 { (identifier))))))) (expression_statement (for_expression - (loop_label + (label (identifier)) (identifier) (range_expression @@ -908,7 +908,7 @@ for i in 0..256 { (block (expression_statement (for_expression - (loop_label + (label (identifier)) (identifier) (range_expression @@ -925,7 +925,7 @@ for i in 0..256 { (block (expression_statement (continue_expression - (loop_label + (label (identifier))))))) (expression_statement (if_expression @@ -937,7 +937,7 @@ for i in 0..256 { (block (expression_statement (continue_expression - (loop_label + (label (identifier)))))))))))))) ================================================================================