diff --git a/C/attvar.c b/C/attvar.c index 93447a08f..cd789b82b 100644 --- a/C/attvar.c +++ b/C/attvar.c @@ -357,6 +357,15 @@ DelAtts(attvar_record *attv, Term oatt) } } +static void +DelAllAtts(attvar_record *attv) +{ + if (RepAppl(attv->Atts) >= HB) + RESET_VARIABLE(&attv->Atts); + else + MaBind(&(attv->Atts), MkVarTerm()); +} + static void PutAtt(Int pos, Term atts, Term att) { @@ -638,6 +647,21 @@ p_del_atts(void) { } } +static Int +p_del_all_atts(void) { + /* receive a variable in ARG1 */ + Term inp = Deref(ARG1); + + /* if this is unbound, ok */ + if (IsVarTerm(inp) && IsAttachedTerm(inp)) { + attvar_record *attv; + + attv = (attvar_record *)VarOfTerm(inp); + DelAllAtts(attv); + } + return TRUE; +} + static Int p_get_att(void) { /* receive a variable in ARG1 */ @@ -1010,6 +1034,7 @@ void Yap_InitAttVarPreds(void) Yap_InitCPred("put_att_term", 2, p_put_att_term, 0); Yap_InitCPred("put_module_atts", 2, p_put_atts, 0); Yap_InitCPred("del_all_module_atts", 2, p_del_atts, 0); + Yap_InitCPred("del_all_atts", 1, p_del_all_atts, 0); Yap_InitCPred("rm_att", 4, p_rm_att, 0); Yap_InitCPred("bind_attvar", 1, p_bind_attvar, SafePredFlag); Yap_InitCPred("unbind_attvar", 1, p_unbind_attvar, SafePredFlag); diff --git a/library/dialect/swi.yap b/library/dialect/swi.yap index 1d2505c53..2edeb4692 100755 --- a/library/dialect/swi.yap +++ b/library/dialect/swi.yap @@ -284,6 +284,9 @@ prolog:del_attr(Var, Mod) :- functor(AttTerm, Mod, 2), attributes:del_all_module_atts(Var, AttTerm). +prolog:del_attrs(Var) :- + attributes:del_all_atts(Var). + prolog:get_attrs(AttVar, SWIAtts) :- get_all_swi_atts(AttVar,SWIAtts). diff --git a/pl/consult.yap b/pl/consult.yap index 1bfb3c3ad..d83db29b9 100644 --- a/pl/consult.yap +++ b/pl/consult.yap @@ -196,9 +196,9 @@ consult(Fs) :- '$consult'(Fs,Module) :- '$access_yap_flags'(8, 2), % SICStus Prolog compatibility !, - '$load_files'(Module:Fs,[],Fs). + '$load_files'(Module:Fs,[],consult(Fs)). '$consult'(Fs, Module) :- - '$load_files'(Module:Fs,[consult(consult)],Fs). + '$load_files'(Module:Fs,[consult(consult)],consult(Fs)). reconsult(Fs) :- '$load_files'(Fs, [], reconsult(Fs)).