aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-05-31 19:51:06 +0200
committerJonas Maier <jonas@x77.dev>2026-05-31 19:51:06 +0200
commitd2544d0655a7d7851b3142cd5452e6f88f006a7d (patch)
tree68452a3a90198fa6b58c7ffcf0b190dc4db88d9f /src/parse
parent789bea635f6b566af6d2793fee484ce129c33caa (diff)
downloadpish-d2544d0655a7d7851b3142cd5452e6f88f006a7d.tar.gz
add . to regex parsing
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/mod.rs6
-rw-r--r--src/parse/regex/mod.rs6
2 files changed, 9 insertions, 3 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index b475943..4cba0fd 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -1875,8 +1875,10 @@ pub struct Case<T: Stage> {
}
impl CmdDisplay for CaseBranch {
- fn cdisplay(&self, _w: &mut dyn std::io::Write) -> std::io::Result<()> {
- todo!()
+ fn cdisplay(&self, w: &mut dyn std::io::Write) -> std::io::Result<()> {
+ write!(w, "case_branch(\"{:?}\", ", self.pattern)?;
+ self.block.cdisplay(w)?;
+ write!(w, ")")
}
}
diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs
index 1c761a1..d5e4cdf 100644
--- a/src/parse/regex/mod.rs
+++ b/src/parse/regex/mod.rs
@@ -89,7 +89,7 @@ fn parse_rep(s: &mut super::Cursor<'_>) -> Result<Pattern> {
// TODO: non-greedy
}
-const SYMBOLS: &[u8] = b"{}[]()*+-?| ";
+const SYMBOLS: &[u8] = b"{}[]()*+-?|. ";
fn is_symbol(x: u8) -> bool {
SYMBOLS.contains(&x)
}
@@ -150,6 +150,10 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> {
}
Ok(inner)
}
+ b'.' => {
+ s.adv();
+ Ok(Pattern::Range(0, 127))
+ }
x if is_symbol(x) => Ok(Pattern::Nothing),
ch => {
s.adv();