diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-02 12:39:41 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-02 12:39:41 +0200 |
| commit | 1a138779293823177613238591768077d781de05 (patch) | |
| tree | 68323afdce3703e9fa933830ec196ba33fc51eaa /src/run | |
| parent | 9d1a342cea994a9d912f348deec5cdb2032b4189 (diff) | |
| download | pish-1a138779293823177613238591768077d781de05.tar.gz | |
regex: parse lookahead and lookbehind
Diffstat (limited to 'src/run')
| -rw-r--r-- | src/run/builtin.rs | 11 | ||||
| -rw-r--r-- | src/run/mod.rs | 5 |
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); } } |
