diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-05-08 23:27:45 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-05-08 23:27:45 +0200 |
| commit | 365465ea66d68df515d8cbd66d4f1f0e4411cf29 (patch) | |
| tree | 0240550bb38ad38b5105e56232278c90a03a1060 | |
| parent | 80f92d26fb1b9e4ca777a4b33d477451b49494d8 (diff) | |
| download | pish-365465ea66d68df515d8cbd66d4f1f0e4411cf29.tar.gz | |
heredoc builtin
| -rw-r--r-- | src/run/builtin.rs | 29 | ||||
| -rw-r--r-- | src/run/mod.rs | 1 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs index a40ef51..d060911 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -860,7 +860,7 @@ impl Builtin for source { #[derive(Copy, Clone)] pub struct Break; -impl Builtin for Break { +impl Builtin for Break { fn name(&self) -> &str { "break" } @@ -879,7 +879,7 @@ impl Builtin for Break { #[derive(Copy, Clone)] pub struct Continue; -impl Builtin for Continue { +impl Builtin for Continue { fn name(&self) -> &str { "continue" } @@ -893,4 +893,27 @@ impl Builtin for Continue { ) -> Result { Err(Error::Continue) } -}
\ No newline at end of file +} + +#[derive(Copy, Clone)] +pub struct Here; + +impl Builtin for Here { + fn name(&self) -> &str { + "here" + } + + fn io( + &self, + _session: Arc<Mutex<Session>>, + args: &[BString], + _stdin: &mut dyn Read, + stdout: &mut dyn Write, + ) -> Result { + if args.is_empty() { + return Err(Error::Exit(1)); + } + stdout.write_all(&args[0])?; + Ok(()) + } +} diff --git a/src/run/mod.rs b/src/run/mod.rs index 7770b86..885261b 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -687,6 +687,7 @@ const BUILTINS: &[&'static dyn BuiltinClone] = &[ &builtin::source, &builtin::Break, &builtin::Continue, + &builtin::Here, ]; pub fn builtin_map() -> HashMap<BString, &'static dyn BuiltinClone> { |
