pub mod alias;
pub mod bg;
pub mod r#break;
pub mod cd;
pub mod colon;
pub mod command;
pub mod common;
pub mod r#continue;
pub mod eval;
pub mod exec;
pub mod exit;
pub mod export;
pub mod r#false;
pub mod fg;
pub mod getopts;
pub mod jobs;
pub mod kill;
pub mod pwd;
pub mod read;
pub mod readonly;
pub mod r#return;
pub mod set;
pub mod shift;
pub mod source;
pub mod times;
pub mod trap;
pub mod r#true;
pub mod r#type;
pub mod typeset;
pub mod ulimit;
pub mod umask;
pub mod unalias;
pub mod unset;
pub mod wait;
use std::future::ready;
#[cfg(doc)]
use yash_env::Env;
use yash_env::builtin::Type::{Elective, Mandatory, Special, Substitutive};
#[doc(no_inline)]
pub use yash_env::builtin::*;
#[cfg(doc)]
use yash_env::stack::{Frame, Stack};
use yash_env::system::resource::{GetRlimit, SetRlimit};
use yash_env::system::{
Chdir, Clock, Close, Dup, Exec, Exit, Fcntl, Fork, Fstat, GetCwd, GetPid, GetPw, GetUid,
IsExecutableFile, Isatty, Open, Pipe, Read, Seek, SendSignal, SetPgid, ShellPath, Sigaction,
Sigmask, Signals, Sysconf, TcGetPgrp, TcSetPgrp, Times, Umask, Wait, Write,
};
pub fn iter<S>() -> impl Iterator<Item = (&'static str, Builtin<S>)>
where
S: Chdir
+ Clock
+ Close
+ Dup
+ Exec
+ Exit
+ Fcntl
+ Fork
+ Fstat
+ GetCwd
+ GetPid
+ GetPw
+ GetRlimit
+ GetUid
+ IsExecutableFile
+ Isatty
+ Open
+ Pipe
+ Read
+ Seek
+ SendSignal
+ SetPgid
+ SetRlimit
+ ShellPath
+ Sigaction
+ Sigmask
+ Signals
+ Sysconf
+ TcGetPgrp
+ TcSetPgrp
+ Times
+ Umask
+ Wait
+ Write
+ 'static,
{
[
(
".",
Builtin::new(Special, |env, args| Box::pin(source::main(env, args))),
),
(
":",
Builtin::new(Special, |env, args| Box::pin(ready(colon::main(env, args)))),
),
(
"alias",
Builtin::new(Mandatory, |env, args| Box::pin(alias::main(env, args))),
),
(
"bg",
Builtin::new(Mandatory, |env, args| Box::pin(bg::main(env, args))),
),
(
"break",
Builtin::new(Special, |env, args| Box::pin(r#break::main(env, args))),
),
(
"cd",
Builtin::new(Mandatory, |env, args| Box::pin(cd::main(env, args))),
),
("command", {
let mut builtin =
Builtin::new(Mandatory, |env, args| Box::pin(command::main(env, args)));
builtin.is_declaration_utility = None;
builtin
}),
(
"continue",
Builtin::new(Special, |env, args| Box::pin(r#continue::main(env, args))),
),
(
"eval",
Builtin::new(Special, |env, args| Box::pin(eval::main(env, args))),
),
(
"exec",
Builtin::new(Special, |env, args| Box::pin(exec::main(env, args))),
),
(
"exit",
Builtin::new(Special, |env, args| Box::pin(exit::main(env, args))),
),
("export", {
let mut builtin = Builtin::new(Special, |env, args| Box::pin(export::main(env, args)));
builtin.is_declaration_utility = Some(true);
builtin
}),
(
"false",
Builtin::new(Substitutive, |env, args| Box::pin(r#false::main(env, args))),
),
(
"fg",
Builtin::new(Mandatory, |env, args| Box::pin(fg::main(env, args))),
),
(
"getopts",
Builtin::new(Mandatory, |env, args| Box::pin(getopts::main(env, args))),
),
(
"jobs",
Builtin::new(Mandatory, |env, args| Box::pin(jobs::main(env, args))),
),
(
"kill",
Builtin::new(Mandatory, |env, args| Box::pin(kill::main(env, args))),
),
(
"pwd",
Builtin::new(Substitutive, |env, args| Box::pin(pwd::main(env, args))),
),
(
"read",
Builtin::new(Mandatory, |env, args| Box::pin(read::main(env, args))),
),
("readonly", {
let mut builtin =
Builtin::new(Special, |env, args| Box::pin(readonly::main(env, args)));
builtin.is_declaration_utility = Some(true);
builtin
}),
(
"return",
Builtin::new(Special, |env, args| Box::pin(r#return::main(env, args))),
),
(
"set",
Builtin::new(Special, |env, args| Box::pin(set::main(env, args))),
),
(
"shift",
Builtin::new(Special, |env, args| Box::pin(shift::main(env, args))),
),
(
"source",
Builtin::new(Special, |env, args| Box::pin(source::main(env, args))),
),
(
"times",
Builtin::new(Special, |env, args| Box::pin(times::main(env, args))),
),
(
"trap",
Builtin::new(Special, |env, args| Box::pin(trap::main(env, args))),
),
(
"true",
Builtin::new(Substitutive, |env, args| Box::pin(r#true::main(env, args))),
),
(
"type",
Builtin::new(Mandatory, |env, args| Box::pin(r#type::main(env, args))),
),
("typeset", {
let mut builtin =
Builtin::new(Elective, |env, args| Box::pin(typeset::main(env, args)));
builtin.is_declaration_utility = Some(true);
builtin
}),
(
"ulimit",
Builtin::new(Mandatory, |env, args| Box::pin(ulimit::main(env, args))),
),
(
"umask",
Builtin::new(Mandatory, |env, args| Box::pin(umask::main(env, args))),
),
(
"unalias",
Builtin::new(Mandatory, |env, args| Box::pin(unalias::main(env, args))),
),
(
"unset",
Builtin::new(Special, |env, args| Box::pin(unset::main(env, args))),
),
(
"wait",
Builtin::new(Mandatory, |env, args| Box::pin(wait::main(env, args))),
),
]
.into_iter()
}
#[cfg(test)]
mod tests {
use super::*;
use yash_env::system::r#virtual::VirtualSystem;
#[test]
fn iter_is_sorted() {
assert!(iter::<VirtualSystem>().is_sorted_by_key(|pair| pair.0));
}
}