From 014ec49138ed95fd8bb30ee89b8ca8909d5b3246 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Sat, 12 Oct 2024 09:32:14 -0700 Subject: [PATCH 1/2] 2024: Add reserved syntax --- src/tokens.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/tokens.md b/src/tokens.md index 774a73b9f..1ba44b654 100644 --- a/src/tokens.md +++ b/src/tokens.md @@ -887,9 +887,24 @@ r[lex.token.reserved-prefix.edition2021] > lexes!{match"..." {}} > ``` +## Reserved guards + +> **Lexer 2024+**\ +> RESERVED_GUARDED_STRING_LITERAL : `#`+ [STRING_LITERAL]\ +> RESERVED_POUNDS : `#`2.. + +The reserved guards are syntax reserved for future use, and will generate a compile error if used. + +The *reserved guarded string literal* is a token of one or more `U+0023` (`#`) immediately followed by a [STRING_LITERAL]. + +The *reserved pounds* is a token of two or more `U+0023` (`#`). + +> **Edition differences**: Before the 2024 edition, reserved guards are accepted by the lexer and interpreted as multiple tokens. For example, the `#"foo"#` form is interpreted as three tokens. `##` is interpreted as two tokens. + [Inferred types]: types/inferred.md [Range patterns]: patterns.md#range-patterns [Reference patterns]: patterns.md#reference-patterns +[STRING_LITERAL]: tokens.md#string-literals [Subpattern binding]: patterns.md#identifier-patterns [Wildcard patterns]: patterns.md#wildcard-pattern [arith]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators From 35ee2a906b9385b0487b1bbd74b398fa98a365ee Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Mon, 4 Nov 2024 10:07:22 -0800 Subject: [PATCH 2/2] Add rules for reserved guards --- src/tokens.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tokens.md b/src/tokens.md index 1ba44b654..88e472897 100644 --- a/src/tokens.md +++ b/src/tokens.md @@ -889,16 +889,23 @@ r[lex.token.reserved-prefix.edition2021] ## Reserved guards +r[lex.token.reserved-guards] + +r[lex.token.reserved-guards.syntax] > **Lexer 2024+**\ > RESERVED_GUARDED_STRING_LITERAL : `#`+ [STRING_LITERAL]\ > RESERVED_POUNDS : `#`2.. +r[lex.token.reserved-guards.intro] The reserved guards are syntax reserved for future use, and will generate a compile error if used. +r[lex.token.reserved-guards.string-literal] The *reserved guarded string literal* is a token of one or more `U+0023` (`#`) immediately followed by a [STRING_LITERAL]. +r[lex.token.reserved-guards.pounds] The *reserved pounds* is a token of two or more `U+0023` (`#`). +r[lex.token.reserved-guards.edition2024] > **Edition differences**: Before the 2024 edition, reserved guards are accepted by the lexer and interpreted as multiple tokens. For example, the `#"foo"#` form is interpreted as three tokens. `##` is interpreted as two tokens. [Inferred types]: types/inferred.md