From: Bennet Bleßmann Date: Sun, 20 Jul 2025 19:08:44 +0000 (+0200) Subject: store child process in machine state X-Git-Tag: v0.10.0~35^2^2~24 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=1ee4f7a55f966afb54dbd2598c4c18be6f887c71;p=scryer-prolog.git store child process in machine state --- diff --git a/src/machine/machine_state.rs b/src/machine/machine_state.rs index 7663c952..6d583b00 100644 --- a/src/machine/machine_state.rs +++ b/src/machine/machine_state.rs @@ -20,9 +20,11 @@ use crate::parser::dashu::Integer; use indexmap::IndexMap; +use std::collections::BTreeMap; use std::convert::TryFrom; use std::fmt; use std::ops::{Index, IndexMut, Range}; +use std::process::Child; use std::sync::Arc; pub(crate) type Registers = [HeapCellValue; MAX_ARITY + 1]; @@ -97,6 +99,7 @@ pub struct MachineState { pub(crate) unify_fn: fn(&mut MachineState), pub(crate) bind_fn: fn(&mut MachineState, Ref, HeapCellValue), pub(crate) run_cleaners_fn: fn(&mut Machine) -> bool, + pub(crate) child_processes: BTreeMap, } impl fmt::Debug for MachineState { diff --git a/src/machine/machine_state_impl.rs b/src/machine/machine_state_impl.rs index 3f14253d..e8b9d644 100644 --- a/src/machine/machine_state_impl.rs +++ b/src/machine/machine_state_impl.rs @@ -19,6 +19,7 @@ use crate::types::*; use indexmap::IndexSet; use std::cmp::Ordering; +use std::collections::BTreeMap; use std::convert::TryFrom; impl MachineState { @@ -67,6 +68,7 @@ impl MachineState { unify_fn: MachineState::unify, bind_fn: MachineState::bind, run_cleaners_fn: |_| false, + child_processes: BTreeMap::new(), } } diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index d09344b0..ff95d22b 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -8497,12 +8497,16 @@ impl Machine { match command.spawn() { Ok(child) => { let pid = child.id(); + + self.machine_st.child_processes.insert(pid, child); + self.machine_st.bind( pid_r .as_var() .expect("invalid values should have been rejected on the prolog side"), fixnum_as_cell!(Fixnum::build_with(pid)), ); + Ok(()) } Err(_) => {