From: Mark Thom Date: Sat, 15 Mar 2025 09:10:04 +0000 (-0700) Subject: read Str focus properly in build_meta_predicate_clause X-Git-Tag: v0.10.0~35^2~50 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=2ad870c7402342ad81d6d2a9a098739a23ef51a8;p=scryer-prolog.git read Str focus properly in build_meta_predicate_clause --- diff --git a/src/machine/preprocessor.rs b/src/machine/preprocessor.rs index 51e45a4a..ff64494a 100644 --- a/src/machine/preprocessor.rs +++ b/src/machine/preprocessor.rs @@ -460,7 +460,19 @@ fn build_meta_predicate_clause<'a, LS: LoadState<'a>>( use crate::machine::heap::Heap; let mut index_ptrs = IndexMap::with_hasher(FxBuildHasher::default()); - for (subterm_loc, meta_spec) in (term.focus + 1..term.focus + arity + 1).zip(meta_specs) { + let focus = { + let heap = loader.machine_heap(); + let focus_cell = + heap_bound_store(heap, heap_bound_deref(heap, heap_loc_as_cell!(term.focus))); + + if focus_cell.get_tag() == HeapCellValueTag::Str { + focus_cell.get_value() as usize + } else { + return index_ptrs; + } + }; + + for (subterm_loc, meta_spec) in (focus + 1..focus + arity + 1).zip(meta_specs) { if let MetaSpec::RequiresExpansionWithArgument(supp_args) = meta_spec { let predicate_key_opt = term_predicate_key(loader.machine_heap(), subterm_loc);