correct and generalize current_predicate/1
This commit is contained in:
@@ -1252,14 +1252,13 @@ abolish(Pred) :-
|
||||
% It can be used to check for existence of a predicate or to enumerate all loaded predicates
|
||||
current_predicate(Pred) :-
|
||||
( var(Pred) ->
|
||||
'$get_db_refs'(_, _, PIs),
|
||||
'$get_db_refs'(_, _, _, PIs),
|
||||
lists:member(Pred, PIs)
|
||||
; '$strip_module'(Pred, Module, UnqualifiedPred),
|
||||
( var(Module),
|
||||
\+ functor(Pred, (:), 2)
|
||||
; atom(Module)
|
||||
),
|
||||
nonvar(UnqualifiedPred),
|
||||
UnqualifiedPred = Name/Arity ->
|
||||
( ( nonvar(Name), \+ atom(Name)
|
||||
; nonvar(Arity), \+ integer(Arity)
|
||||
|
||||
@@ -3774,7 +3774,7 @@ impl Machine {
|
||||
(HeapCellValueTag::Atom, (module_name, _arity)) => {
|
||||
module_name
|
||||
}
|
||||
(HeapCellValueTag::AttrVar | HeapCellValueTag::Var) => {
|
||||
(HeapCellValueTag::AttrVar | HeapCellValueTag::Var | HeapCellValueTag::StackVar) => {
|
||||
atom!("user")
|
||||
}
|
||||
_ => {
|
||||
@@ -3845,9 +3845,9 @@ impl Machine {
|
||||
(0 .. num_functors).map(|i| str_loc_as_cell!(h + 3 * i)),
|
||||
);
|
||||
|
||||
unify!(self.machine_st, heap_loc_as_cell!(h), self.machine_st.registers[3]);
|
||||
unify!(self.machine_st, heap_loc_as_cell!(h), self.machine_st.registers[4]);
|
||||
} else {
|
||||
unify!(self.machine_st, empty_list_as_cell!(), self.machine_st.registers[3]);
|
||||
unify!(self.machine_st, empty_list_as_cell!(), self.machine_st.registers[4]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user