aboutsummaryrefslogtreecommitdiffstats
path: root/src/run
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-02 12:39:41 +0200
committerJonas Maier <jonas@x77.dev>2026-06-02 12:39:41 +0200
commit1a138779293823177613238591768077d781de05 (patch)
tree68323afdce3703e9fa933830ec196ba33fc51eaa /src/run
parent9d1a342cea994a9d912f348deec5cdb2032b4189 (diff)
downloadpish-1a138779293823177613238591768077d781de05.tar.gz
regex: parse lookahead and lookbehind
Diffstat (limited to 'src/run')
-rw-r--r--src/run/builtin.rs11
-rw-r--r--src/run/mod.rs5
2 files changed, 11 insertions, 5 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index f3682f7..fd4cbed 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -1116,13 +1116,18 @@ mod dbg {
let regex = match crate::parse::regex::Pattern::parse_from_bytes(&args[0]) {
Ok(r) => r,
Err(e) => {
- writeln!(stdout, "not a valid regex: {e:?}")?;
+ writeln!(stdout, "parse error: {e:?}")?;
return Err(Error::Exit(1));
},
};
- let compiled = regex.compile();
- writeln!(stdout, "{compiled:?}")?;
+ match regex.try_compile() {
+ Ok(compiled) => writeln!(stdout, "{compiled:?}")?,
+ Err(e) => {
+ writeln!(stdout, "compilation error: {e:?}")?;
+ return Err(Error::Exit(2));
+ },
+ }
Ok(())
}
diff --git a/src/run/mod.rs b/src/run/mod.rs
index 009954b..c730272 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -457,8 +457,9 @@ impl Executor {
) -> SpawnedCmd {
for branch in c.branches.into_iter() {
// TODO: do not compile every time
- let compiled = branch.pattern.compile();
- if compiled.matches(&c.discriminant) {
+ if let Ok(compiled) = branch.pattern.try_compile()
+ && compiled.matches(&c.discriminant)
+ {
return self.execute_block(branch.block, stdin, stdout);
}
}