aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/regex
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-03 20:18:14 +0200
committerJonas Maier <jonas@x77.dev>2026-06-03 20:19:22 +0200
commit7c7a10dd58d50bacc712e91e2344c466a22a2d25 (patch)
treed36eb78f21c19349148eb76222c27f5b753b2462 /src/parse/regex
parent65b1a84fbda96d65565c4e3d6cc1f3c89285aab7 (diff)
downloadpish-7c7a10dd58d50bacc712e91e2344c466a22a2d25.tar.gz
regex: more lenient [bracket] parsing
Diffstat (limited to 'src/parse/regex')
-rw-r--r--src/parse/regex/mod.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs
index d0335f0..63808cd 100644
--- a/src/parse/regex/mod.rs
+++ b/src/parse/regex/mod.rs
@@ -152,10 +152,6 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> {
return Ok(Pattern::Alt(ranges));
}
- if is_symbol(tok) {
- return Err(ParseError::Unknown(tok));
- }
-
let begin = s.loc();
if s.has() && s.peek() == b'-' {
s.adv();
@@ -164,13 +160,17 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> {
if !s.has() {
return Err(ParseError::Eof);
}
- let tok2 = s.adv();
+ let tok2 = s.peek();
- if is_symbol(tok2) {
+ if tok2 == b']' {
+ ranges.push(Pattern::Byte(tok));
+ ranges.push(Pattern::Byte(b'-'));
+ } else if is_symbol(tok2) {
return Err(ParseError::Unknown(tok2));
+ } else {
+ s.adv();
+ ranges.push(Pattern::Range(tok, tok2));
}
-
- ranges.push(Pattern::Range(tok, tok2));
} else {
ranges.push(Pattern::Byte(tok));
}