]> Repositorios git - scryer-prolog.git/commitdiff
interrupt running queries and return to toplevel (#323)
authorMark Thom <[email protected]>
Wed, 15 Apr 2020 06:08:35 +0000 (00:08 -0600)
committerMark Thom <[email protected]>
Sat, 18 Apr 2020 20:16:40 +0000 (14:16 -0600)
src/prolog/machine/mod.rs

index 248f35fe3907f6d534d75cda37f1c85f84376eb6..414a6ad67f50f5877274c87914c1656f2c5e3dff 100644 (file)
@@ -343,14 +343,18 @@ impl Machine {
         use std::env;
 
         let mut arg_pstrs = vec![];
+
         for arg in env::args() {
             arg_pstrs.push(self.machine_st.heap.put_complete_string(&arg));
         }
-        let list_addr = Addr::HeapCell(self.machine_st.heap.to_list(arg_pstrs.into_iter()));
 
+        let list_addr = Addr::HeapCell(self.machine_st.heap.to_list(arg_pstrs.into_iter()));
         self.machine_st[temp_v!(1)] = list_addr;
-        self.machine_st.p = CodePtr::Local(LocalCodePtr::DirEntry(self.toplevel_idx));
-        self.run_query();
+
+        loop {
+            self.machine_st.p = CodePtr::Local(LocalCodePtr::DirEntry(self.toplevel_idx));
+            self.run_query();
+        }
     }
 
     pub fn new(current_input_stream: Stream, current_output_stream: Stream) -> Self