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
|
% It can be used to check for existence of a predicate or to enumerate all loaded predicates
|
||||||
current_predicate(Pred) :-
|
current_predicate(Pred) :-
|
||||||
( var(Pred) ->
|
( var(Pred) ->
|
||||||
'$get_db_refs'(_, _, PIs),
|
'$get_db_refs'(_, _, _, PIs),
|
||||||
lists:member(Pred, PIs)
|
lists:member(Pred, PIs)
|
||||||
; '$strip_module'(Pred, Module, UnqualifiedPred),
|
; '$strip_module'(Pred, Module, UnqualifiedPred),
|
||||||
( var(Module),
|
( var(Module),
|
||||||
\+ functor(Pred, (:), 2)
|
\+ functor(Pred, (:), 2)
|
||||||
; atom(Module)
|
; atom(Module)
|
||||||
),
|
),
|
||||||
nonvar(UnqualifiedPred),
|
|
||||||
UnqualifiedPred = Name/Arity ->
|
UnqualifiedPred = Name/Arity ->
|
||||||
( ( nonvar(Name), \+ atom(Name)
|
( ( nonvar(Name), \+ atom(Name)
|
||||||
; nonvar(Arity), \+ integer(Arity)
|
; nonvar(Arity), \+ integer(Arity)
|
||||||
|
|||||||
@@ -70,9 +70,9 @@ _lists of characters_. This is an ideal representation:
|
|||||||
file_exists/1,
|
file_exists/1,
|
||||||
directory_exists/1,
|
directory_exists/1,
|
||||||
delete_file/1,
|
delete_file/1,
|
||||||
rename_file/2,
|
rename_file/2,
|
||||||
file_copy/2,
|
file_copy/2,
|
||||||
delete_directory/1,
|
delete_directory/1,
|
||||||
make_directory/1,
|
make_directory/1,
|
||||||
make_directory_path/1,
|
make_directory_path/1,
|
||||||
working_directory/2,
|
working_directory/2,
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ but they're not part of the ISO Prolog standard at the moment.
|
|||||||
setup_call_cleanup/3,
|
setup_call_cleanup/3,
|
||||||
call_nth/2,
|
call_nth/2,
|
||||||
copy_term_nat/2,
|
copy_term_nat/2,
|
||||||
asserta/2,
|
asserta/2,
|
||||||
assertz/2]).
|
assertz/2]).
|
||||||
|
|
||||||
:- use_module(library(error), [can_be/2,
|
:- use_module(library(error), [can_be/2,
|
||||||
domain_error/3,
|
domain_error/3,
|
||||||
|
|||||||
@@ -3774,7 +3774,7 @@ impl Machine {
|
|||||||
(HeapCellValueTag::Atom, (module_name, _arity)) => {
|
(HeapCellValueTag::Atom, (module_name, _arity)) => {
|
||||||
module_name
|
module_name
|
||||||
}
|
}
|
||||||
(HeapCellValueTag::AttrVar | HeapCellValueTag::Var) => {
|
(HeapCellValueTag::AttrVar | HeapCellValueTag::Var | HeapCellValueTag::StackVar) => {
|
||||||
atom!("user")
|
atom!("user")
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@@ -3845,9 +3845,9 @@ impl Machine {
|
|||||||
(0 .. num_functors).map(|i| str_loc_as_cell!(h + 3 * i)),
|
(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 {
|
} 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