make some new process functions

This commit is contained in:
Scott Richmond 2025-06-27 12:27:54 -04:00
parent 00ebac17ce
commit 90505f89fe
2 changed files with 34 additions and 6 deletions

View File

@ -1241,14 +1241,22 @@ fn link! {
"Creates a 'hard link' between two processes: if either one dies, they both do."
(pid1 as :keyword, pid2 as :keyword) -> link! (pid1, pid2, :report)
(pid1 as :keyword, pid2 as :keyword, :report) -> base :process (:link_report, pid1, pid2)
(pid1 as :keyword, pid2 as :keyword, :panic) -> base :process (:link_panic, pid1, pid2)
(pid1 as :keyword, pid2 as :keyword, :enforce) -> base :process (:link_enforce, pid1, pid2)
}
fn msgs () -> base :process (:msgs)
fn msgs {
"Returns the entire contents of the current process as a list. Leaves all messages in the process mailbox."
() -> base :process (:msgs)
}
fn flush! () -> base :process (:flush)
fn flush! {
"Clears the current process's mailbox."
() -> base :process (:flush)}
fn sleep! (ms as :number) -> base :process (:sleep, ms)
fn sleep! {
"Puts the current process to sleep for at least the specified number of milliseconds."
(ms as :number) -> base :process (:sleep, ms)
}
#{
self
@ -1256,8 +1264,11 @@ fn sleep! (ms as :number) -> base :process (:sleep, ms)
msgs
spawn!
yield!
alive?
link!
flush!
sleep!
abs
abs

View File

@ -289,7 +289,7 @@ impl Creature {
.borrow_mut()
.send_msg(pid, args[2].clone());
}
self.push(Value::Nil);
self.push(Value::Keyword("ok"));
}
"spawn" => {
println!("spawning new process!");
@ -300,8 +300,25 @@ impl Creature {
}
"yield" => {
self.r#yield = true;
self.push(Value::Nil);
self.push(Value::Keyword("ok"));
}
"alive" => {
let Value::Keyword(pid) = args[1].clone() else {
unreachable!();
};
let is_alive = self.zoo.as_ref().borrow().is_alive(pid);
if is_alive {
self.push(Value::True)
} else {
self.push(Value::False)
}
}
"link" => todo!(),
"flush" => {
self.mbx = VecDeque::new();
self.push(Value::Keyword("ok"));
}
"sleep" => {}
msg => panic!("Process does not understand message: {msg}"),
}
}