PredicateDefined,
#[strum_discriminants(strum(props(Arity = "3", Name = "$strip_module")))]
StripModule,
- #[strum_discriminants(strum(props(Arity = "4", Name = "$compile_inline_or_expanded_goal")))]
+ #[strum_discriminants(strum(props(Arity = "5", Name = "$compile_inline_or_expanded_goal")))]
CompileInlineOrExpandedGoal,
#[strum_discriminants(strum(props(Arity = "arity", Name = "$fast_call")))]
FastCallN(usize),
expand_module_names(UnexpandedGoals4, MetaSpecs, Module1, ExpandedGoals0, HeadVars)
; ExpandedGoals0 = UnexpandedGoals4
),
- '$compile_inline_or_expanded_goal'(ExpandedGoals0, SuppArgs, ExpandedGoals1, Module1),
+ '$compile_inline_or_expanded_goal'(ExpandedGoals0, SuppArgs, ExpandedGoals1, Module1, UnexpandedGoals0),
expand_module_name(ExpandedGoals1, MS, Module1, ExpandedGoals).
is_simple_goal: bool,
goal: HeapCellValue,
key: PredicateKey,
- expanded_vars: IndexSet<HeapCellValue, BuildHasherDefault<FxHasher>>,
supp_vars: IndexSet<HeapCellValue, BuildHasherDefault<FxHasher>>,
}
// insertion as well as the previous
// supp_vars.len() argument's variables being
// disjoint from them. if they are not, the
- // expanded goal are not simple.
+ // expanded goal is not simple.
let post_supp_args = self.machine_st.heap[s+arity-supp_vars.len()+1 .. s+arity+1]
.iter()
is_simple_goal,
goal,
key: (name, arity),
- expanded_vars,
supp_vars
}
}
is_simple_goal: true,
goal: str_loc_as_cell!(h),
key: (name, 0),
- expanded_vars: IndexSet::with_hasher(FxBuildHasher::default()),
supp_vars,
}
}
is_simple_goal: true,
goal: str_loc_as_cell!(h),
key: (name, 0),
- expanded_vars: IndexSet::with_hasher(FxBuildHasher::default()),
supp_vars,
}
}
.push(untyped_arena_ptr_as_cell!(UntypedArenaPtr::from(idx)));
result.goal
} else {
+ let mut unexpanded_vars = IndexSet::with_hasher(FxBuildHasher::default());
+ self.machine_st.variable_set(&mut unexpanded_vars, self.machine_st.registers[5]);
+
// all supp_vars must appear later!
let vars = IndexSet::<HeapCellValue, BuildHasherDefault<FxHasher>>::from_iter(
- result.expanded_vars.difference(&result.supp_vars).cloned(),
+ unexpanded_vars.difference(&result.supp_vars).cloned(),
);
let vars: Vec<_> = vars
self.machine_st.heap.push(atom_as_cell!(atom!("$aux"), 0));
- for value in result.expanded_vars.difference(&result.supp_vars).cloned() {
+ for value in unexpanded_vars.difference(&result.supp_vars).cloned() {
self.machine_st.heap.push(value);
}