From 33fc2ed10c292025e2ffcda1edec8fb02b9013c1 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 31 Jan 2024 17:30:13 -0700 Subject: [PATCH] index stub choice point correctly --- src/machine/lib_integration_test_commands.txt | 1 - src/machine/lib_machine.rs | 33 ++++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/machine/lib_integration_test_commands.txt b/src/machine/lib_integration_test_commands.txt index e2c7328e..9c01a8fb 100644 --- a/src/machine/lib_integration_test_commands.txt +++ b/src/machine/lib_integration_test_commands.txt @@ -495,7 +495,6 @@ subject_class("Todo", C), constructor(C, Actions). triple("literal://string:Todo", "ad4m://sdna", "literal://string:subject_class%28%22Todo%22%2C%20c%29.%0Aconstructor%28c%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22todo%3A%2F%2Fready%22%7D%5D%27%29.%0Ainstance%28c%2C%20Base%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fstate%22%2C%20_%29.%0A%0Adestructor%28c%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22todo%3A%2F%2Fready%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22state%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22state%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fstate%22%2C%20Value%29.%0Aproperty_setter%28c%2C%20%22state%22%2C%20%27%5B%7Baction%3A%20%22setSingleTarget%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22title%22%29.%0Aproperty_resolve%28c%2C%20%22title%22%29.%0Aproperty_resolve_language%28c%2C%20%22title%22%2C%20%22literal%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22title%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fhas_title%22%2C%20Value%29.%0Aproperty_setter%28c%2C%20%22title%22%2C%20%27%5B%7Baction%3A%20%22setSingleTarget%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fhas_title%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22isLiked%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22isLiked%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22flux%3A%2F%2Fhas_reaction%22%2C%20%22flux%3A%2F%2Fthumbsup%22%29%2C%20Value%20%3D%20true.%0A%0Acollection%28c%2C%20%22comments%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22comments%22%2C%20List%29%20%3A-%20findall%28C%2C%20triple%28Base%2C%20%22todo%3A%2F%2Fcomment%22%2C%20C%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22entries%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22entries%22%2C%20List%29%20%3A-%20findall%28C%2C%20triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20C%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22messages%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22messages%22%2C%20List%29%20%3A-%20setof%28Target%2C%20%28triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20Target%29%2C%20instance%28OtherClass%2C%20Target%29%2C%20subject_class%28%22Message%22%2C%20OtherClass%29%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22likedMessages%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22likedMessages%22%2C%20List%29%20%3A-%20setof%28Target%2C%20%28triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20Target%29%2C%20triple%28Target%2C%20%22flux%3A%2F%2Fhas_reaction%22%2C%20%22flux%3A%2F%2Fthumbsup%22%29%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A"). triple("literal://string:construct%20test", "todo://state", "todo://ready"). triple("literal://string:get%20proxy%20test", "todo://state", "todo://ready"). -triple("literal://string:construct%20test", "todo://state", "todo://ready"). link("literal://string:Todo", "ad4m://sdna", "literal://string:subject_class%28%22Todo%22%2C%20c%29.%0Aconstructor%28c%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22todo%3A%2F%2Fready%22%7D%5D%27%29.%0Ainstance%28c%2C%20Base%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fstate%22%2C%20_%29.%0A%0Adestructor%28c%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22todo%3A%2F%2Fready%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22state%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22state%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fstate%22%2C%20Value%29.%0Aproperty_setter%28c%2C%20%22state%22%2C%20%27%5B%7Baction%3A%20%22setSingleTarget%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fstate%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22title%22%29.%0Aproperty_resolve%28c%2C%20%22title%22%29.%0Aproperty_resolve_language%28c%2C%20%22title%22%2C%20%22literal%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22title%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22todo%3A%2F%2Fhas_title%22%2C%20Value%29.%0Aproperty_setter%28c%2C%20%22title%22%2C%20%27%5B%7Baction%3A%20%22setSingleTarget%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fhas_title%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Aproperty%28c%2C%20%22isLiked%22%29.%0Aproperty_getter%28c%2C%20Base%2C%20%22isLiked%22%2C%20Value%29%20%3A-%20triple%28Base%2C%20%22flux%3A%2F%2Fhas_reaction%22%2C%20%22flux%3A%2F%2Fthumbsup%22%29%2C%20Value%20%3D%20true.%0A%0Acollection%28c%2C%20%22comments%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22comments%22%2C%20List%29%20%3A-%20findall%28C%2C%20triple%28Base%2C%20%22todo%3A%2F%2Fcomment%22%2C%20C%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22commentss%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22todo%3A%2F%2Fcomment%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22entries%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22entries%22%2C%20List%29%20%3A-%20findall%28C%2C%20triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20C%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22entriess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22messages%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22messages%22%2C%20List%29%20%3A-%20setof%28Target%2C%20%28triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20Target%29%2C%20instance%28OtherClass%2C%20Target%29%2C%20subject_class%28%22Message%22%2C%20OtherClass%29%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22messagess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A%0Acollection%28c%2C%20%22likedMessages%22%29.%0Acollection_getter%28c%2C%20Base%2C%20%22likedMessages%22%2C%20List%29%20%3A-%20setof%28Target%2C%20%28triple%28Base%2C%20%22flux%3A%2F%2Fentry_type%22%2C%20Target%29%2C%20triple%28Target%2C%20%22flux%3A%2F%2Fhas_reaction%22%2C%20%22flux%3A%2F%2Fthumbsup%22%29%29%2C%20List%29.%0Acollection_adder%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22addLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_remover%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22removeLink%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0Acollection_setter%28c%2C%20%22likedMessagess%22%2C%20%27%5B%7Baction%3A%20%22collectionSetter%22%2C%20source%3A%20%22this%22%2C%20predicate%3A%20%22flux%3A%2F%2Fentry_type%22%2C%20target%3A%20%22value%22%7D%5D%27%29.%0A", 1706199296474, "did:key:z6Mkoszv7RVeQjbDkHb2R7CYtvdMYc2Po8GqAmR1W6zizp7K"). link("literal://string:construct%20test", "todo://state", "todo://ready", 1706199296530, "did:key:z6Mkoszv7RVeQjbDkHb2R7CYtvdMYc2Po8GqAmR1W6zizp7K"). link("literal://string:get%20proxy%20test", "todo://state", "todo://ready", 1706199296724, "did:key:z6Mkoszv7RVeQjbDkHb2R7CYtvdMYc2Po8GqAmR1W6zizp7K"). diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index 4b5ffe5d..faf2252b 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -39,10 +39,10 @@ impl Machine { fn allocate_stub_choice_point(&mut self) { // NOTE: create a choice point to terminate the dispatch_loop - // if an exception is thrown. since the and/or stack is presumed empty, + // if an exception is thrown. let stub_b = self.machine_st.stack.allocate_or_frame(0); - let or_frame = self.machine_st.stack.index_or_frame_mut(0); + let or_frame = self.machine_st.stack.index_or_frame_mut(stub_b); or_frame.prelude.num_cells = 0; or_frame.prelude.e = 0; @@ -72,24 +72,13 @@ impl Machine { .read_term(&op_dir, Tokens::Default) .expect("Failed to parse query"); + self.allocate_stub_choice_point(); + // Write parsed term to heap let term_write_result = write_term_to_heap(&term, &mut self.machine_st.heap, &self.machine_st.atom_tbl) .expect("couldn't write term to heap"); - // Write term to heap - self.machine_st.registers[1] = self.machine_st.heap[term_write_result.heap_loc]; - - self.machine_st.cp = LIB_QUERY_SUCCESS; // BREAK_FROM_DISPATCH_LOOP_LOC; - self.machine_st.p = self - .indices - .code_dir - .get(&(atom!("call"), 1)) - .expect("couldn't get code index") - .local() - .unwrap(); - self.machine_st.b0 = self.machine_st.b; - let var_names: IndexMap<_, _> = term_write_result .var_dict .iter() @@ -102,7 +91,19 @@ impl Machine { }) .collect(); - self.allocate_stub_choice_point(); + // Write term to heap + self.machine_st.registers[1] = self.machine_st.heap[term_write_result.heap_loc]; + + self.machine_st.cp = LIB_QUERY_SUCCESS; // BREAK_FROM_DISPATCH_LOOP_LOC; + let call_index_p = self + .indices + .code_dir + .get(&(atom!("call"), 1)) + .expect("couldn't get code index") + .local() + .unwrap(); + + self.machine_st.execute_at_index(1, call_index_p); let stub_b = self.machine_st.b; -- 2.54.0