]> Repositorios git - scryer-prolog.git/commitdiff
get it working
authorBennet Bleßmann <[email protected]>
Sat, 19 Jul 2025 19:33:19 +0000 (21:33 +0200)
committerBennet Bleßmann <[email protected]>
Fri, 1 Aug 2025 18:19:54 +0000 (20:19 +0200)
src/lib/process.pl
src/machine/system_calls.rs

index e712bd698dd916209a39e2937dca743c0c901890..f0a0a81910dfe926bd34de33e0390e8bb8cea210 100644 (file)
@@ -6,7 +6,6 @@
 
 process_create(Exe, Args, Options) :- 
     must_be(chars, Exe),
-    must_be(list(chars), Args),
     must_be(list, Options),
     check_option(Sin, find_stdio(Sin, stdin, Options), valid_stdio, [std], Stdin),
     check_option(Sout, find_stdio(Sout, stdout, Options), valid_stdio, [std], Stdout),
@@ -35,10 +34,12 @@ valid_stdio([null]).
 valid_stdio([pipe, Stream]) :- must_be(var, Stream).
 valid_stdio([file, Path]) :- must_be(chars, Path).
 
-find_env([env, E], Options) :- member(env(E), Options).
-find_env([environment, E], Options) :- member(environment(E), Options).
+find_env([env, ME], Options) :- member(env(E), Options), maplist(assign_to_list, E, ME).
+find_env([environment, ME], Options) :- member(environment(E), Options), maplist(assign_to_list, E, ME).
 
-valid_cwd(Cwd) :- must_be(chars, Cwd).
+assign_to_list(N=V, [N,v]).
+
+valid_cwd(Cwd).
 
 valid_env([env, E]) :- valid_env_(E).
 valid_env([environment, E]) :- valid_env_(E).
index 51092f647023a1a5dfd556ee321874bf89dc0651..63aabd8b53bc9fcc33f4655c5edfd857ecd86482 100644 (file)
@@ -8441,28 +8441,27 @@ impl Machine {
             _ => panic!("Invalid value for clear_env"),
         };
 
-        let env_names = self.machine_st.try_from_list(env_args[0], stub_gen)?;
-        let env_values = self.machine_st.try_from_list(env_args[1], stub_gen)?;
-
-        let envs = env_names
+        let envs = self
+            .machine_st
+            .try_from_list(env_args[1], stub_gen)?
             .into_iter()
-            .zip(env_values)
-            .map(|(name, value)| {
+            .map(|entry| {
+                let entry = self.machine_st.try_from_list(entry, stub_gen)?;
                 let name = self
                     .machine_st
-                    .value_to_str_like(name)
+                    .value_to_str_like(entry[0])
                     .unwrap()
                     .as_str()
                     .to_string();
                 let value = self
                     .machine_st
-                    .value_to_str_like(value)
+                    .value_to_str_like(entry[1])
                     .unwrap()
                     .as_str()
                     .to_string();
-                (name, value)
+                Ok((name, value))
             })
-            .collect::<Vec<_>>();
+            .collect::<Result<Vec<_>, MachineStub>>()?;
 
         let cwd = self.machine_st.value_to_str_like(cwd_r);