add built_in to predicate_property

This commit is contained in:
Mark Thom
2021-02-02 15:03:14 -07:00
parent 814c034683
commit 8900df6f13
7 changed files with 60 additions and 9 deletions

View File

@@ -1530,6 +1530,43 @@ impl Machine {
}
}
pub(crate)
fn builtin_property(&mut self) {
let key =
self.machine_st.read_predicate_key(
self.machine_st[temp_v!(1)],
self.machine_st[temp_v!(2)],
);
match ClauseType::from(key.0, key.1, None) {
ClauseType::BuiltIn(_) | ClauseType::Inlined(..) | ClauseType::CallN => {
return;
}
ClauseType::Named(ref name, arity, _) => {
if let Some(module) = self.indices.modules.get(&(clause_name!("builtins"))) {
self.machine_st.fail = !module.code_dir.contains_key(
&(name.clone(), arity),
);
return;
}
}
ClauseType::Op(ref name, ref op_desc, _) => {
if let Some(module) = self.indices.modules.get(&(clause_name!("builtins"))) {
self.machine_st.fail = !module.code_dir.contains_key(
&(name.clone(), op_desc.arity()),
);
return;
}
}
_ => {
}
}
self.machine_st.fail = true;
}
pub(crate)
fn compile_pending_predicates(&mut self) {
let (mut loader, evacuable_h) = self.loader_from_heap_evacuable(temp_v!(1));

View File

@@ -505,6 +505,7 @@ pub enum REPLCodePtr {
AddDynamicPredicate,
AddGoalExpansionClause,
AddTermExpansionClause,
BuiltInProperty,
ClauseToEvacuable,
ConcludeLoad,
DeclareModule,

View File

@@ -463,6 +463,9 @@ impl Machine {
REPLCodePtr::MetaPredicateProperty => {
self.meta_predicate_property();
}
REPLCodePtr::BuiltInProperty => {
self.builtin_property();
}
REPLCodePtr::CompilePendingPredicates => {
self.compile_pending_predicates();
}