simplify module access

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@981 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2004-02-12 12:37:12 +00:00
parent 08fe01ad98
commit 6662ca157e
31 changed files with 391 additions and 416 deletions

View File

@ -2532,7 +2532,7 @@ Yap_absmi(int inp)
ENDP(pt1); ENDP(pt1);
} }
ENDD(d0); ENDD(d0);
H[0] = Yap_Module_Name(((CODEADDR)(SREG))); H[0] = Yap_Module_Name((PredEntry *)SREG);
ARG1 = (Term) AbsPair(H); ARG1 = (Term) AbsPair(H);
H += 2; H += 2;
@ -6434,7 +6434,7 @@ Yap_absmi(int inp)
ENDP(pt1); ENDP(pt1);
} }
ENDD(d0); ENDD(d0);
H[0] = Yap_Module_Name((CODEADDR)pe); H[0] = Yap_Module_Name(pe);
ARG1 = (Term) AbsPair(H); ARG1 = (Term) AbsPair(H);
H += 2; H += 2;
} }
@ -6498,7 +6498,7 @@ Yap_absmi(int inp)
ENDP(pt1); ENDP(pt1);
} }
ENDD(d0); ENDD(d0);
H[0] = Yap_Module_Name((CODEADDR)pe); H[0] = Yap_Module_Name(pe);
} }
ARG1 = (Term) AbsPair(H); ARG1 = (Term) AbsPair(H);
H += 2; H += 2;
@ -11279,7 +11279,7 @@ Yap_absmi(int inp)
BOp(p_execute, sla); BOp(p_execute, sla);
{ {
PredEntry *pen; PredEntry *pen;
SMALLUNSGN mod = PREG->u.sla.sla_u.m_num; Term mod = PREG->u.sla.sla_u.mod;
CACHE_Y_AS_ENV(YREG); CACHE_Y_AS_ENV(YREG);
/* Try to preserve the environment */ /* Try to preserve the environment */
@ -11314,7 +11314,7 @@ Yap_absmi(int inp)
Term tmod = ArgOfTerm(1,d0); Term tmod = ArgOfTerm(1,d0);
if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) { if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) {
d0 = ArgOfTerm(2,d0); d0 = ArgOfTerm(2,d0);
mod = Yap_LookupModule(tmod); mod = tmod;
goto execute_nvar; goto execute_nvar;
} }
} else if (f == FunctorComma) { } else if (f == FunctorComma) {
@ -11431,7 +11431,10 @@ Yap_absmi(int inp)
ARG1 = ARG3 = d0; ARG1 = ARG3 = d0;
pen = PredMetaCall; pen = PredMetaCall;
ARG2 = Yap_cp_as_integer(B); ARG2 = Yap_cp_as_integer(B);
ARG4 = ModuleName[mod]; if (mod)
ARG4 = mod;
else
ARG4 = TermProlog;
CACHE_A1(); CACHE_A1();
goto execute_end; goto execute_end;
ENDP(pt1); ENDP(pt1);
@ -11462,7 +11465,7 @@ Yap_absmi(int inp)
BOp(p_execute_tail, e); BOp(p_execute_tail, e);
{ {
PredEntry *pen; PredEntry *pen;
SMALLUNSGN mod; Term mod;
UInt arity; UInt arity;
CACHE_Y_AS_ENV(YREG); CACHE_Y_AS_ENV(YREG);
@ -11513,7 +11516,7 @@ Yap_absmi(int inp)
Term tmod = ArgOfTerm(1, d1); Term tmod = ArgOfTerm(1, d1);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) if (IsVarTerm(tmod) || !IsAtomTerm(tmod))
goto execute_metacall_after_comma; goto execute_metacall_after_comma;
mod = Yap_LookupModule(tmod); mod = tmod;
d1 = RepAppl(d1)[2]; d1 = RepAppl(d1)[2];
goto execute_comma_comma; goto execute_comma_comma;
} else { } else {
@ -11565,7 +11568,7 @@ Yap_absmi(int inp)
Term tmod = ArgOfTerm(1, d0); Term tmod = ArgOfTerm(1, d0);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) if (IsVarTerm(tmod) || !IsAtomTerm(tmod))
goto execute_metacall_after_comma; goto execute_metacall_after_comma;
mod = Yap_LookupModule(tmod); mod = tmod;
d0 = RepAppl(d0)[2]; d0 = RepAppl(d0)[2];
goto execute_comma_comma2; goto execute_comma_comma2;
} else { } else {
@ -11601,7 +11604,10 @@ Yap_absmi(int inp)
ARG1 = ARG3 = d0; ARG1 = ARG3 = d0;
pen = PredMetaCall; pen = PredMetaCall;
ARG2 = Yap_cp_as_integer((choiceptr)pt0[E_CB]); ARG2 = Yap_cp_as_integer((choiceptr)pt0[E_CB]);
ARG4 = ModuleName[mod]; if (mod)
ARG4 = mod;
else
ARG4 = TermProlog;
CACHE_A1(); CACHE_A1();
goto execute_after_comma; goto execute_after_comma;
} }

View File

@ -27,8 +27,8 @@ static char SccsId[] = "%W% %G%";
#include "Yap.h" #include "Yap.h"
ADDR STD_PROTO(Yap_PreAllocCodeSpace, (void)); ADDR STD_PROTO(Yap_PreAllocCodeSpace, (void));
Prop STD_PROTO(PredPropByFunc,(Functor, SMALLUNSGN)); Prop STD_PROTO(PredPropByFunc,(Functor, Term));
Prop STD_PROTO(PredPropByAtom,(Atom, SMALLUNSGN)); Prop STD_PROTO(PredPropByAtom,(Atom, Term));
#include "Yatom.h" #include "Yatom.h"
#include "Heap.h" #include "Heap.h"
#include "yapio.h" #include "yapio.h"
@ -300,7 +300,7 @@ Yap_GetAProp(Atom a, PropFlags kind)
} }
inline static Prop inline static Prop
GetPredPropByAtomHavingLock(AtomEntry* ae, SMALLUNSGN cur_mod) GetPredPropByAtomHavingLock(AtomEntry* ae, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -324,7 +324,7 @@ GetPredPropByAtomHavingLock(AtomEntry* ae, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_GetPredPropByAtom(Atom at, SMALLUNSGN cur_mod) Yap_GetPredPropByAtom(Atom at, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -338,7 +338,7 @@ Yap_GetPredPropByAtom(Atom at, SMALLUNSGN cur_mod)
inline static Prop inline static Prop
GetPredPropByAtomHavingLockInThisModule(AtomEntry* ae, SMALLUNSGN cur_mod) GetPredPropByAtomHavingLockInThisModule(AtomEntry* ae, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -361,7 +361,7 @@ GetPredPropByAtomHavingLockInThisModule(AtomEntry* ae, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_GetPredPropByAtomInThisModule(Atom at, SMALLUNSGN cur_mod) Yap_GetPredPropByAtomInThisModule(Atom at, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -375,7 +375,7 @@ Yap_GetPredPropByAtomInThisModule(Atom at, SMALLUNSGN cur_mod)
static inline Prop static inline Prop
GetPredPropByFuncHavingLock(Functor f, SMALLUNSGN cur_mod) GetPredPropByFuncHavingLock(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -400,7 +400,7 @@ GetPredPropByFuncHavingLock(Functor f, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_GetPredPropByFunc(Functor f, SMALLUNSGN cur_mod) Yap_GetPredPropByFunc(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; */ /* get predicate entry for ap/arity; */
{ {
Prop p0; Prop p0;
@ -412,7 +412,7 @@ Yap_GetPredPropByFunc(Functor f, SMALLUNSGN cur_mod)
} }
static inline Prop static inline Prop
GetPredPropByFuncHavingLockInThisModule(Functor f, SMALLUNSGN cur_mod) GetPredPropByFuncHavingLockInThisModule(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -436,7 +436,7 @@ GetPredPropByFuncHavingLockInThisModule(Functor f, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_GetPredPropByFuncInThisModule(Functor f, SMALLUNSGN cur_mod) Yap_GetPredPropByFuncInThisModule(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; */ /* get predicate entry for ap/arity; */
{ {
Prop p0; Prop p0;
@ -448,7 +448,7 @@ Yap_GetPredPropByFuncInThisModule(Functor f, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_GetPredPropHavingLock(Atom ap, unsigned int arity, SMALLUNSGN mod) Yap_GetPredPropHavingLock(Atom ap, unsigned int arity, Term mod)
/* get predicate entry for ap/arity; */ /* get predicate entry for ap/arity; */
{ {
Prop p0; Prop p0;
@ -496,7 +496,7 @@ Yap_GetExpPropHavingLock(AtomEntry *ae, unsigned int arity)
/* fe is supposed to be locked */ /* fe is supposed to be locked */
Prop Prop
Yap_NewPredPropByFunctor(FunctorEntry *fe, SMALLUNSGN cur_mod) Yap_NewPredPropByFunctor(FunctorEntry *fe, Term cur_mod)
{ {
Prop p0; Prop p0;
PredEntry *p = (PredEntry *) Yap_AllocAtomSpace(sizeof(*p)); PredEntry *p = (PredEntry *) Yap_AllocAtomSpace(sizeof(*p));
@ -512,9 +512,11 @@ Yap_NewPredPropByFunctor(FunctorEntry *fe, SMALLUNSGN cur_mod)
p->OpcodeOfPred = UNDEF_OPCODE; p->OpcodeOfPred = UNDEF_OPCODE;
p->CodeOfPred = p->cs.p_code.TrueCodeOfPred = (yamop *)(&(p->OpcodeOfPred)); p->CodeOfPred = p->cs.p_code.TrueCodeOfPred = (yamop *)(&(p->OpcodeOfPred));
p->cs.p_code.ExpandCode = EXPAND_OP_CODE; p->cs.p_code.ExpandCode = EXPAND_OP_CODE;
p->ModuleOfPred = cur_mod; if (cur_mod == TermProlog)
p->NextPredOfModule = ModulePred[cur_mod]; p->ModuleOfPred = 0;
ModulePred[cur_mod] = p; else
p->ModuleOfPred = cur_mod;
Yap_NewModulePred(cur_mod, p);
INIT_LOCK(p->StatisticsForPred.lock); INIT_LOCK(p->StatisticsForPred.lock);
p->StatisticsForPred.NOfEntries = 0; p->StatisticsForPred.NOfEntries = 0;
p->StatisticsForPred.NOfHeadSuccesses = 0; p->StatisticsForPred.NOfHeadSuccesses = 0;
@ -565,12 +567,12 @@ Yap_NewThreadPred(PredEntry *ap)
#endif #endif
Prop Prop
Yap_NewPredPropByAtom(AtomEntry *ae, SMALLUNSGN cur_mod) Yap_NewPredPropByAtom(AtomEntry *ae, Term cur_mod)
{ {
Prop p0; Prop p0;
PredEntry *p = (PredEntry *) Yap_AllocAtomSpace(sizeof(*p)); PredEntry *p = (PredEntry *) Yap_AllocAtomSpace(sizeof(*p));
/* Printf("entering %s:%s/0\n", RepAtom(AtomOfTerm(ModuleName[cur_mod]))->StrOfAE, ae->StrOfAE); */ /* Printf("entering %s:%s/0\n", RepAtom(AtomOfTerm(cur_mod))->StrOfAE, ae->StrOfAE); */
INIT_RWLOCK(p->PRWLock); INIT_RWLOCK(p->PRWLock);
INIT_LOCK(p->PELock); INIT_LOCK(p->PELock);
@ -583,9 +585,11 @@ Yap_NewPredPropByAtom(AtomEntry *ae, SMALLUNSGN cur_mod)
p->OpcodeOfPred = UNDEF_OPCODE; p->OpcodeOfPred = UNDEF_OPCODE;
p->cs.p_code.ExpandCode = EXPAND_OP_CODE; p->cs.p_code.ExpandCode = EXPAND_OP_CODE;
p->CodeOfPred = p->cs.p_code.TrueCodeOfPred = (yamop *)(&(p->OpcodeOfPred)); p->CodeOfPred = p->cs.p_code.TrueCodeOfPred = (yamop *)(&(p->OpcodeOfPred));
p->ModuleOfPred = cur_mod; if (cur_mod == TermProlog)
p->NextPredOfModule = ModulePred[cur_mod]; p->ModuleOfPred = 0;
ModulePred[cur_mod] = p; else
p->ModuleOfPred = cur_mod;
Yap_NewModulePred(cur_mod, p);
INIT_LOCK(p->StatisticsForPred.lock); INIT_LOCK(p->StatisticsForPred.lock);
p->StatisticsForPred.NOfEntries = 0; p->StatisticsForPred.NOfEntries = 0;
p->StatisticsForPred.NOfHeadSuccesses = 0; p->StatisticsForPred.NOfHeadSuccesses = 0;
@ -602,7 +606,7 @@ Yap_NewPredPropByAtom(AtomEntry *ae, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_PredPropByFunctorNonThreadLocal(Functor f, SMALLUNSGN cur_mod) Yap_PredPropByFunctorNonThreadLocal(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -623,7 +627,7 @@ Yap_PredPropByFunctorNonThreadLocal(Functor f, SMALLUNSGN cur_mod)
} }
Prop Prop
Yap_PredPropByAtomNonThreadLocal(Atom at, SMALLUNSGN cur_mod) Yap_PredPropByAtomNonThreadLocal(Atom at, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;

View File

@ -822,7 +822,7 @@ a_p(op_numbers opcode, clause_info *clinfo, yamop *code_p, int pass_no, struct i
if (RepPredProp(fe)->FunctorOfPred != FunctorExecuteInMod) { if (RepPredProp(fe)->FunctorOfPred != FunctorExecuteInMod) {
code_p->u.sla.sla_u.p = RepPredProp(fe); code_p->u.sla.sla_u.p = RepPredProp(fe);
} else { } else {
code_p->u.sla.sla_u.m_num = IntegerOfTerm(cip->cpc->rnd4); code_p->u.sla.sla_u.mod = cip->cpc->rnd4;
} }
code_p->u.sla.p0 = clinfo->CurrentPred; code_p->u.sla.p0 = clinfo->CurrentPred;
if (cip->cpc->rnd2) { if (cip->cpc->rnd2) {

16
C/bb.c
View File

@ -26,7 +26,7 @@ static char SccsId[] = "%W% %G%";
#endif #endif
static BBProp static BBProp
PutBBProp(AtomEntry *ae, SMALLUNSGN mod) /* get BBentry for at; */ PutBBProp(AtomEntry *ae, Term mod) /* get BBentry for at; */
{ {
Prop p0; Prop p0;
BBProp p; BBProp p;
@ -57,7 +57,7 @@ PutBBProp(AtomEntry *ae, SMALLUNSGN mod) /* get BBentry for at; */
} }
static BBProp static BBProp
PutIntBBProp(Int key, SMALLUNSGN mod) /* get BBentry for at; */ PutIntBBProp(Int key, Term mod) /* get BBentry for at; */
{ {
Prop p0; Prop p0;
BBProp p; BBProp p;
@ -105,7 +105,7 @@ PutIntBBProp(Int key, SMALLUNSGN mod) /* get BBentry for at; */
} }
static BBProp static BBProp
GetBBProp(AtomEntry *ae, SMALLUNSGN mod) /* get BBentry for at; */ GetBBProp(AtomEntry *ae, Term mod) /* get BBentry for at; */
{ {
Prop p0; Prop p0;
BBProp p; BBProp p;
@ -124,7 +124,7 @@ GetBBProp(AtomEntry *ae, SMALLUNSGN mod) /* get BBentry for at; */
} }
static BBProp static BBProp
GetIntBBProp(Int key, SMALLUNSGN mod) /* get BBentry for at; */ GetIntBBProp(Int key, Term mod) /* get BBentry for at; */
{ {
Prop p0; Prop p0;
BBProp p; BBProp p;
@ -187,7 +187,7 @@ resize_bb_int_keys(UInt new_size) {
} }
static BBProp static BBProp
AddBBProp(Term t1, char *msg, SMALLUNSGN mod) AddBBProp(Term t1, char *msg, Term mod)
{ {
BBProp p; BBProp p;
@ -203,7 +203,7 @@ AddBBProp(Term t1, char *msg, SMALLUNSGN mod)
Term tmod = ArgOfTerm(1, t1); Term tmod = ArgOfTerm(1, t1);
if (!IsVarTerm(tmod) ) { if (!IsVarTerm(tmod) ) {
t1 = ArgOfTerm(2, t1); t1 = ArgOfTerm(2, t1);
mod = Yap_LookupModule(tmod); mod = tmod;
goto restart; goto restart;
} else { } else {
Yap_Error(INSTANTIATION_ERROR, t1, msg); Yap_Error(INSTANTIATION_ERROR, t1, msg);
@ -217,7 +217,7 @@ AddBBProp(Term t1, char *msg, SMALLUNSGN mod)
} }
static BBProp static BBProp
FetchBBProp(Term t1, char *msg, SMALLUNSGN mod) FetchBBProp(Term t1, char *msg, Term mod)
{ {
BBProp p; BBProp p;
@ -232,7 +232,7 @@ FetchBBProp(Term t1, char *msg, SMALLUNSGN mod)
} else if (IsApplTerm(t1) && FunctorOfTerm(t1) == FunctorModule) { } else if (IsApplTerm(t1) && FunctorOfTerm(t1) == FunctorModule) {
Term tmod = ArgOfTerm(1, t1); Term tmod = ArgOfTerm(1, t1);
if (!IsVarTerm(tmod) ) { if (!IsVarTerm(tmod) ) {
mod = Yap_LookupModule(tmod); mod = tmod;
t1 = ArgOfTerm(2, t1); t1 = ArgOfTerm(2, t1);
goto restart; goto restart;
} else { } else {

View File

@ -114,7 +114,6 @@ X_API Term *STD_PROTO(YAP_AddressFromSlot,(long));
X_API void STD_PROTO(YAP_PutInSlot,(long, Term)); X_API void STD_PROTO(YAP_PutInSlot,(long, Term));
X_API void STD_PROTO(YAP_RecoverSlots,(int)); X_API void STD_PROTO(YAP_RecoverSlots,(int));
X_API void STD_PROTO(YAP_Throw,(Term)); X_API void STD_PROTO(YAP_Throw,(Term));
X_API int STD_PROTO(YAP_LookupModule,(Term));
X_API Term STD_PROTO(YAP_ModuleName,(int)); X_API Term STD_PROTO(YAP_ModuleName,(int));
X_API void STD_PROTO(YAP_Halt,(int)); X_API void STD_PROTO(YAP_Halt,(int));
X_API Term *STD_PROTO(YAP_TopOfLocalStack,(void)); X_API Term *STD_PROTO(YAP_TopOfLocalStack,(void));
@ -122,7 +121,7 @@ X_API void *STD_PROTO(YAP_Predicate,(Atom,unsigned long int,int));
X_API void STD_PROTO(YAP_PredicateInfo,(void *,Atom *,unsigned long int *,int *)); X_API void STD_PROTO(YAP_PredicateInfo,(void *,Atom *,unsigned long int *,int *));
X_API void STD_PROTO(YAP_UserCPredicate,(char *,CPredicate,unsigned long int)); X_API void STD_PROTO(YAP_UserCPredicate,(char *,CPredicate,unsigned long int));
X_API void STD_PROTO(YAP_UserBackCPredicate,(char *,CPredicate,CPredicate,unsigned long int,unsigned int)); X_API void STD_PROTO(YAP_UserBackCPredicate,(char *,CPredicate,CPredicate,unsigned long int,unsigned int));
X_API void STD_PROTO(YAP_UserCPredicateWithArgs,(char *,CPredicate,unsigned long int,int)); X_API void STD_PROTO(YAP_UserCPredicateWithArgs,(char *,CPredicate,unsigned long int,Term));
X_API Int STD_PROTO(YAP_CurrentModule,(void)); X_API Int STD_PROTO(YAP_CurrentModule,(void));
static int (*do_getf)(void); static int (*do_getf)(void);
@ -567,7 +566,7 @@ X_API Int
YAP_CallProlog(Term t) YAP_CallProlog(Term t)
{ {
Int out; Int out;
SMALLUNSGN mod = CurrentModule; Term mod = CurrentModule;
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
while (!IsVarTerm(t) && while (!IsVarTerm(t) &&
@ -576,7 +575,7 @@ YAP_CallProlog(Term t)
Term tmod = ArgOfTerm(1,t); Term tmod = ArgOfTerm(1,t);
if (IsVarTerm(tmod)) return(FALSE); if (IsVarTerm(tmod)) return(FALSE);
if (!IsAtomTerm(tmod)) return(FALSE); if (!IsAtomTerm(tmod)) return(FALSE);
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2,t); t = ArgOfTerm(2,t);
} }
out = Yap_execute_goal(t, 0, mod); out = Yap_execute_goal(t, 0, mod);
@ -1080,18 +1079,6 @@ YAP_Throw(Term t)
RECOVER_MACHINE_REGS(); RECOVER_MACHINE_REGS();
} }
X_API int
YAP_LookupModule(Term t)
{
return(Yap_LookupModule(t));
}
X_API Term
YAP_ModuleName(int i)
{
return(ModuleName[i]);
}
X_API void X_API void
YAP_Halt(int i) YAP_Halt(int i)
{ {
@ -1126,7 +1113,10 @@ YAP_PredicateInfo(void *p, Atom* a, unsigned long int* arity, int* m)
*arity = 0; *arity = 0;
*a = (Atom)(pd->FunctorOfPred); *a = (Atom)(pd->FunctorOfPred);
} }
*m = pd->ModuleOfPred; if (pd->ModuleOfPred)
*m = pd->ModuleOfPred;
else
*m = TermProlog;
} }
X_API void X_API void
@ -1143,10 +1133,10 @@ YAP_UserBackCPredicate(char *name, CPredicate init, CPredicate cont,
} }
X_API void X_API void
YAP_UserCPredicateWithArgs(char *a, CPredicate f, unsigned long int arity, int mod) YAP_UserCPredicateWithArgs(char *a, CPredicate f, unsigned long int arity, Term mod)
{ {
PredEntry *pe; PredEntry *pe;
SMALLUNSGN cm = CurrentModule; Term cm = CurrentModule;
CurrentModule = mod; CurrentModule = mod;
YAP_UserCPredicate(a,f,arity); YAP_UserCPredicate(a,f,arity);
if (arity == 0) { if (arity == 0) {

174
C/cdmgr.c
View File

@ -79,7 +79,7 @@ STATIC_PROTO(Int p_call_count_set, (void));
STATIC_PROTO(Int p_call_count_reset, (void)); STATIC_PROTO(Int p_call_count_reset, (void));
STATIC_PROTO(Int p_toggle_static_predicates_in_use, (void)); STATIC_PROTO(Int p_toggle_static_predicates_in_use, (void));
STATIC_PROTO(Atom YapConsultingFile, (void)); STATIC_PROTO(Atom YapConsultingFile, (void));
STATIC_PROTO(Int PredForCode,(yamop *, Atom *, UInt *, SMALLUNSGN *)); STATIC_PROTO(Int PredForCode,(yamop *, Atom *, UInt *, Term *));
#define PredArity(p) (p->ArityOfPE) #define PredArity(p) (p->ArityOfPE)
#define TRYCODE(G,F,N) ( (N)<5 ? (op_numbers)((int)F+(N)*3) : G) #define TRYCODE(G,F,N) ( (N)<5 ? (op_numbers)((int)F+(N)*3) : G)
@ -153,11 +153,13 @@ IPred(PredEntry *ap)
#ifdef DEBUG #ifdef DEBUG
if (Yap_Option['i' - 'a' + 1]) { if (Yap_Option['i' - 'a' + 1]) {
Term tmod = ModuleName[ap->ModuleOfPred]; Term tmod = ap->ModuleOfPred;
if (!tmod)
tmod = TermProlog;
Yap_DebugPutc(Yap_c_error_stream,'\t'); Yap_DebugPutc(Yap_c_error_stream,'\t');
Yap_plwrite(tmod, Yap_DebugPutc, 0); Yap_plwrite(tmod, Yap_DebugPutc, 0);
Yap_DebugPutc(Yap_c_error_stream,':'); Yap_DebugPutc(Yap_c_error_stream,':');
if (ap->ModuleOfPred == 2) { if (ap->ModuleOfPred == IDB_MODULE) {
Term t = Deref(ARG1); Term t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Yap_plwrite(t, Yap_DebugPutc, 0); Yap_plwrite(t, Yap_DebugPutc, 0);
@ -1058,7 +1060,8 @@ addclause(Term t, yamop *cp, int mode, int mod)
#endif #endif
pflags = p->PredFlags; pflags = p->PredFlags;
/* we are redefining a prolog module predicate */ /* we are redefining a prolog module predicate */
if (p->ModuleOfPred == 0 && mod != 0) { if (p->ModuleOfPred == PROLOG_MODULE &&
mod != TermProlog && mod) {
WRITE_UNLOCK(p->PRWLock); WRITE_UNLOCK(p->PRWLock);
addcl_permission_error(RepAtom(at), Arity, FALSE); addcl_permission_error(RepAtom(at), Arity, FALSE);
return TermNil; return TermNil;
@ -1143,12 +1146,12 @@ addclause(Term t, yamop *cp, int mode, int mod)
} }
void void
Yap_addclause(Term t, yamop *cp, int mode, int mod) { Yap_addclause(Term t, yamop *cp, int mode, Term mod) {
addclause(t, cp, mode, mod); addclause(t, cp, mode, mod);
} }
void void
Yap_EraseStaticClause(StaticClause *cl, SMALLUNSGN mod) { Yap_EraseStaticClause(StaticClause *cl, Term mod) {
PredEntry *ap; PredEntry *ap;
/* ok, first I need to find out the parent predicate */ /* ok, first I need to find out the parent predicate */
@ -1264,7 +1267,7 @@ p_in_this_f_before(void)
Term t; Term t;
register consult_obj *fp; register consult_obj *fp;
Prop p0; Prop p0;
SMALLUNSGN mod; Term mod;
if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t)) if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t))
return (FALSE); return (FALSE);
@ -1274,10 +1277,8 @@ p_in_this_f_before(void)
return (FALSE); return (FALSE);
else else
arity = IntOfTerm(t); arity = IntOfTerm(t);
if (IsVarTerm(t = Deref(ARG3)) || !IsAtomTerm(t)) if (IsVarTerm(mod = Deref(ARG3)) || !IsAtomTerm(mod))
return (FALSE); return FALSE;
else
mod = Yap_LookupModule(t);
if (arity) if (arity)
p0 = PredPropByFunc(Yap_MkFunctor(at, arity),CurrentModule); p0 = PredPropByFunc(Yap_MkFunctor(at, arity),CurrentModule);
else else
@ -1303,7 +1304,7 @@ p_first_cl_in_f(void)
Term t; Term t;
register consult_obj *fp; register consult_obj *fp;
Prop p0; Prop p0;
SMALLUNSGN mod; Term mod;
if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t)) if (IsVarTerm(t = Deref(ARG1)) || !IsAtomTerm(t))
@ -1314,10 +1315,8 @@ p_first_cl_in_f(void)
return (FALSE); return (FALSE);
else else
arity = IntOfTerm(t); arity = IntOfTerm(t);
if (IsVarTerm(t = Deref(ARG3)) || !IsAtomTerm(t)) if (IsVarTerm(mod = Deref(ARG3)) || !IsAtomTerm(mod))
return (FALSE); return (FALSE);
else
mod = Yap_LookupModule(t);
if (arity) if (arity)
p0 = PredPropByFunc(Yap_MkFunctor(at, arity),mod); p0 = PredPropByFunc(Yap_MkFunctor(at, arity),mod);
else else
@ -1379,16 +1378,14 @@ p_compile(void)
{ /* '$compile'(+C,+Flags, Mod) */ { /* '$compile'(+C,+Flags, Mod) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t1 = Deref(ARG2); Term t1 = Deref(ARG2);
Term t3 = Deref(ARG4); Term mod = Deref(ARG4);
yamop *codeadr; yamop *codeadr;
Int mod;
if (IsVarTerm(t1) || !IsIntTerm(t1)) if (IsVarTerm(t1) || !IsIntTerm(t1))
return (FALSE); return (FALSE);
if (IsVarTerm(t3) || !IsAtomTerm(t3)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return (FALSE); return (FALSE);
mod = Yap_LookupModule(t3);
YAPEnterCriticalSection(); YAPEnterCriticalSection();
codeadr = Yap_cclause(t, 2, mod, Deref(ARG3)); /* vsc: give the number of arguments codeadr = Yap_cclause(t, 2, mod, Deref(ARG3)); /* vsc: give the number of arguments
to cclause in case there is overflow */ to cclause in case there is overflow */
@ -1412,18 +1409,16 @@ p_compile_dynamic(void)
{ /* '$compile_dynamic'(+C,+Flags,Mod,-Ref) */ { /* '$compile_dynamic'(+C,+Flags,Mod,-Ref) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t1 = Deref(ARG2); Term t1 = Deref(ARG2);
Term t3 = Deref(ARG4); Term mod = Deref(ARG4);
yamop *code_adr; yamop *code_adr;
int old_optimize; int old_optimize;
Int mod;
if (IsVarTerm(t1) || !IsIntTerm(t1)) if (IsVarTerm(t1) || !IsIntTerm(t1))
return (FALSE); return (FALSE);
if (IsVarTerm(t3) || !IsAtomTerm(t3)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return (FALSE); return (FALSE);
old_optimize = optimizer_on; old_optimize = optimizer_on;
optimizer_on = FALSE; optimizer_on = FALSE;
mod = Yap_LookupModule(t3);
YAPEnterCriticalSection(); YAPEnterCriticalSection();
code_adr = Yap_cclause(t, 3, mod, Deref(ARG3)); /* vsc: give the number of arguments to code_adr = Yap_cclause(t, 3, mod, Deref(ARG3)); /* vsc: give the number of arguments to
cclause() in case there is a overflow */ cclause() in case there is a overflow */
@ -1595,16 +1590,14 @@ p_purge_clauses(void)
{ /* '$purge_clauses'(+Func) */ { /* '$purge_clauses'(+Func) */
PredEntry *pred; PredEntry *pred;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
SMALLUNSGN mod;
Yap_PutValue(AtomAbol, MkAtomTerm(AtomNil)); Yap_PutValue(AtomAbol, MkAtomTerm(AtomNil));
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return FALSE;
if (IsVarTerm(t2) || !IsAtomTerm(t2)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE); return FALSE;
} }
mod = Yap_LookupModule(t2);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t); Atom at = AtomOfTerm(t);
pred = RepPredProp(PredPropByAtom(at, mod)); pred = RepPredProp(PredPropByAtom(at, mod));
@ -1645,20 +1638,17 @@ p_setspy(void)
Atom at; Atom at;
PredEntry *pred; PredEntry *pred;
CELL fg; CELL fg;
Term t; Term t, mod;
Term t2;
SMALLUNSGN mod;
at = Yap_FullLookupAtom("$spy"); at = Yap_FullLookupAtom("$spy");
pred = RepPredProp(PredPropByFunc(Yap_MkFunctor(at, 1),0)); pred = RepPredProp(PredPropByFunc(Yap_MkFunctor(at, 1),0));
SpyCode = pred; SpyCode = pred;
t = Deref(ARG1); t = Deref(ARG1);
t2 = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(mod) || !IsAtomTerm(mod))
return (FALSE);
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return (FALSE);
if (IsVarTerm(t2) || !IsAtomTerm(t2))
return (FALSE);
mod = Yap_LookupModule(t2);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t); Atom at = AtomOfTerm(t);
pred = RepPredProp(Yap_PredPropByAtomNonThreadLocal(at, mod)); pred = RepPredProp(Yap_PredPropByAtomNonThreadLocal(at, mod));
@ -1703,14 +1693,12 @@ p_rmspy(void)
Atom at; Atom at;
PredEntry *pred; PredEntry *pred;
Term t; Term t;
Term t2; Term mod;
SMALLUNSGN mod;
t = Deref(ARG1); t = Deref(ARG1);
t2 = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(t2) || !IsAtomTerm(t2)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return (FALSE); return (FALSE);
mod = Yap_LookupModule(t2);
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return (FALSE);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -1754,15 +1742,13 @@ static Int
p_number_of_clauses(void) p_number_of_clauses(void)
{ /* '$number_of_clauses'(Predicate,M,N) */ { /* '$number_of_clauses'(Predicate,M,N) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
int ncl = 0; int ncl = 0;
Prop pe; Prop pe;
int mod;
if (IsVarTerm(t2) || !IsAtomTerm(t2)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(t2);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Atom a = AtomOfTerm(t); Atom a = AtomOfTerm(t);
pe = Yap_GetPredPropByAtom(a, mod); pe = Yap_GetPredPropByAtom(a, mod);
@ -1784,16 +1770,14 @@ static Int
p_in_use(void) p_in_use(void)
{ /* '$in_use'(+P,+Mod) */ { /* '$in_use'(+P,+Mod) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
PredEntry *pe; PredEntry *pe;
Int out; Int out;
int mod;
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return (FALSE);
if (IsVarTerm(t2) || !IsAtomTerm(t2)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return (FALSE); return (FALSE);
mod = Yap_LookupModule(t2);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t); Atom at = AtomOfTerm(t);
pe = RepPredProp(Yap_GetPredPropByAtom(at, mod)); pe = RepPredProp(Yap_GetPredPropByAtom(at, mod));
@ -1817,7 +1801,7 @@ p_new_multifile(void)
int arity; int arity;
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG3)); Term mod = Deref(ARG3);
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return (FALSE);
@ -1852,17 +1836,15 @@ p_is_multifile(void)
{ /* '$is_multifile'(+S,+Mod) */ { /* '$is_multifile'(+S,+Mod) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
Int out; Int out;
int mod;
if (IsVarTerm(t)) if (IsVarTerm(t))
return (FALSE); return (FALSE);
if (IsVarTerm(t2)) if (IsVarTerm(mod))
return (FALSE); return (FALSE);
if (!IsAtomTerm(t2)) if (!IsAtomTerm(mod))
return (FALSE); return (FALSE);
mod = Yap_LookupModule(t2);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
pe = RepPredProp(Yap_GetPredPropByAtom(AtomOfTerm(t), mod)); pe = RepPredProp(Yap_GetPredPropByAtom(AtomOfTerm(t), mod));
} else if (IsApplTerm(t)) { } else if (IsApplTerm(t)) {
@ -1882,9 +1864,8 @@ p_is_log_updatable(void)
{ /* '$is_dynamic'(+P) */ { /* '$is_dynamic'(+P) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2);
Int out; Int out;
SMALLUNSGN mod = Yap_LookupModule(t2); Term mod = Deref(ARG2);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return (FALSE); return (FALSE);
@ -1909,9 +1890,8 @@ p_is_source(void)
{ /* '$is_dynamic'(+P) */ { /* '$is_dynamic'(+P) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
Int out; Int out;
SMALLUNSGN mod = Yap_LookupModule(t2);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return (FALSE); return (FALSE);
@ -1936,9 +1916,8 @@ p_is_dynamic(void)
{ /* '$is_dynamic'(+P) */ { /* '$is_dynamic'(+P) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
Int out; Int out;
SMALLUNSGN mod = Yap_LookupModule(t2);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return (FALSE); return (FALSE);
@ -1963,9 +1942,8 @@ p_pred_exists(void)
{ /* '$pred_exists'(+P,+M) */ { /* '$pred_exists'(+P,+M) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
Int out; Int out;
SMALLUNSGN mod = Yap_LookupModule(t2);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return (FALSE); return (FALSE);
@ -1992,7 +1970,7 @@ p_set_pred_module(void)
{ /* '$set_pred_module'(+P,+Mod) */ { /* '$set_pred_module'(+P,+Mod) */
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = CurrentModule; Term mod = CurrentModule;
restart_set_pred: restart_set_pred:
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
@ -2011,7 +1989,7 @@ p_set_pred_module(void)
Yap_Error(TYPE_ERROR_ATOM,ARG1,"set_pred_module/1"); Yap_Error(TYPE_ERROR_ATOM,ARG1,"set_pred_module/1");
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2, t); t = ArgOfTerm(2, t);
goto restart_set_pred; goto restart_set_pred;
} }
@ -2021,10 +1999,7 @@ p_set_pred_module(void)
if (EndOfPAEntr(pe)) if (EndOfPAEntr(pe))
return FALSE; return FALSE;
WRITE_LOCK(pe->PRWLock); WRITE_LOCK(pe->PRWLock);
{ pe->ModuleOfPred = Deref(ARG2);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2));
pe->ModuleOfPred = mod;
}
WRITE_UNLOCK(pe->PRWLock); WRITE_UNLOCK(pe->PRWLock);
return(TRUE); return(TRUE);
} }
@ -2034,20 +2009,18 @@ p_undefined(void)
{ /* '$undefined'(P,Mod) */ { /* '$undefined'(P,Mod) */
PredEntry *pe; PredEntry *pe;
Term t; Term t;
Term t2; Term mod;
SMALLUNSGN mod;
t = Deref(ARG1); t = Deref(ARG1);
t2 = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(t2)) { if (IsVarTerm(mod)) {
Yap_Error(INSTANTIATION_ERROR,ARG2,"undefined/1"); Yap_Error(INSTANTIATION_ERROR,ARG2,"undefined/1");
return(FALSE); return(FALSE);
} }
if (!IsAtomTerm(t2)) { if (!IsAtomTerm(mod)) {
Yap_Error(TYPE_ERROR_ATOM,ARG2,"undefined/1"); Yap_Error(TYPE_ERROR_ATOM,ARG2,"undefined/1");
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(t2);
restart_undefined: restart_undefined:
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
Yap_Error(INSTANTIATION_ERROR,ARG1,"undefined/1"); Yap_Error(INSTANTIATION_ERROR,ARG1,"undefined/1");
@ -2068,7 +2041,7 @@ p_undefined(void)
Yap_Error(TYPE_ERROR_ATOM,ARG1,"undefined/1"); Yap_Error(TYPE_ERROR_ATOM,ARG1,"undefined/1");
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2, t); t = ArgOfTerm(2, t);
goto restart_undefined; goto restart_undefined;
} }
@ -2101,19 +2074,17 @@ p_kill_dynamic(void)
{ /* '$kill_dynamic'(P,M) */ { /* '$kill_dynamic'(P,M) */
PredEntry *pe; PredEntry *pe;
Term t; Term t;
Term t2; Term mod;
SMALLUNSGN mod;
t2 = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(t2)) { if (IsVarTerm(mod)) {
Yap_Error(INSTANTIATION_ERROR,ARG2,"undefined/1"); Yap_Error(INSTANTIATION_ERROR,ARG2,"undefined/1");
return(FALSE); return(FALSE);
} }
if (!IsAtomTerm(t2)) { if (!IsAtomTerm(mod)) {
Yap_Error(TYPE_ERROR_ATOM,ARG2,"undefined/1"); Yap_Error(TYPE_ERROR_ATOM,ARG2,"undefined/1");
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(t2);
t = Deref(ARG1); t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t); Atom at = AtomOfTerm(t);
@ -2654,7 +2625,7 @@ code_in_pred(PredEntry *pp, Atom *pat, UInt *parity, yamop *codeptr) {
} }
static Int static Int
PredForCode(yamop *codeptr, Atom *pat, UInt *parity, SMALLUNSGN *pmodule) { PredForCode(yamop *codeptr, Atom *pat, UInt *parity, Term *pmodule) {
Int found = 0; Int found = 0;
Int i_table; Int i_table;
@ -2673,7 +2644,7 @@ PredForCode(yamop *codeptr, Atom *pat, UInt *parity, SMALLUNSGN *pmodule) {
} }
Int Int
Yap_PredForCode(yamop *codeptr, Atom *pat, UInt *parity, SMALLUNSGN *pmodule) { Yap_PredForCode(yamop *codeptr, Atom *pat, UInt *parity, Term *pmodule) {
return PredForCode(codeptr, pat, parity, pmodule); return PredForCode(codeptr, pat, parity, pmodule);
} }
@ -2683,7 +2654,7 @@ p_pred_for_code(void) {
yamop *codeptr; yamop *codeptr;
Atom at; Atom at;
UInt arity; UInt arity;
SMALLUNSGN module; Term module;
Int cl; Int cl;
Term t = Deref(ARG1); Term t = Deref(ARG1);
@ -2697,12 +2668,13 @@ p_pred_for_code(void) {
return FALSE; return FALSE;
} }
cl = PredForCode(codeptr, &at, &arity, &module); cl = PredForCode(codeptr, &at, &arity, &module);
if (!module) module = TermProlog;
if (cl == 0) { if (cl == 0) {
return(Yap_unify(ARG5,MkIntTerm(0))); return(Yap_unify(ARG5,MkIntTerm(0)));
} else { } else {
return(Yap_unify(ARG2,MkAtomTerm(at)) && return(Yap_unify(ARG2,MkAtomTerm(at)) &&
Yap_unify(ARG3,MkIntegerTerm(arity)) && Yap_unify(ARG3,MkIntegerTerm(arity)) &&
Yap_unify(ARG4,ModuleName[module]) && Yap_unify(ARG4,module) &&
Yap_unify(ARG5,MkIntegerTerm(cl))); Yap_unify(ARG5,MkIntegerTerm(cl)));
} }
} }
@ -2742,16 +2714,14 @@ p_is_profiled(void)
static Int static Int
p_profile_info(void) p_profile_info(void)
{ {
Term tmod = Deref(ARG1); Term mod = Deref(ARG1);
Term tfun = Deref(ARG2); Term tfun = Deref(ARG2);
int mod;
Term out; Term out;
PredEntry *pe; PredEntry *pe;
Term p[3]; Term p[3];
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return(FALSE); return(FALSE);
mod = Yap_LookupModule(tmod);
if (IsVarTerm(tfun)) { if (IsVarTerm(tfun)) {
return(FALSE); return(FALSE);
} else if (IsApplTerm(tfun)) { } else if (IsApplTerm(tfun)) {
@ -2783,14 +2753,12 @@ p_profile_info(void)
static Int static Int
p_profile_reset(void) p_profile_reset(void)
{ {
Term tmod = Deref(ARG1); Term mod = Deref(ARG1);
Term tfun = Deref(ARG2); Term tfun = Deref(ARG2);
int mod;
PredEntry *pe; PredEntry *pe;
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) if (IsVarTerm(mod) || !IsAtomTerm(mod))
return(FALSE); return(FALSE);
mod = Yap_LookupModule(tmod);
if (IsVarTerm(tfun)) { if (IsVarTerm(tfun)) {
return(FALSE); return(FALSE);
} else if (IsApplTerm(tfun)) { } else if (IsApplTerm(tfun)) {
@ -2903,7 +2871,7 @@ p_parent_pred(void)
We assume a sequence of the form a -> b */ We assume a sequence of the form a -> b */
Atom at; Atom at;
UInt arity; UInt arity;
SMALLUNSGN module; Term module;
if (!PredForCode(P_before_spy, &at, &arity, &module)) { if (!PredForCode(P_before_spy, &at, &arity, &module)) {
return(Yap_unify(ARG1, MkIntTerm(0)) && return(Yap_unify(ARG1, MkIntTerm(0)) &&
Yap_unify(ARG2, MkAtomTerm(AtomMetaCall)) && Yap_unify(ARG2, MkAtomTerm(AtomMetaCall)) &&
@ -2920,7 +2888,7 @@ p_system_pred(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2)); Term mod = Deref(ARG2);
restart_system_pred: restart_system_pred:
if (IsVarTerm(t1)) if (IsVarTerm(t1))
@ -2952,7 +2920,7 @@ p_system_pred(void)
return (FALSE); return (FALSE);
if (EndOfPAEntr(pe)) if (EndOfPAEntr(pe))
return(FALSE); return(FALSE);
return(pe->ModuleOfPred == 0 || pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag)); return(!pe->ModuleOfPred || pe->PredFlags & (UserCPredFlag|CPredFlag|BinaryTestPredFlag|AsmPredFlag|TestPredFlag));
} }
static Int /* $system_predicate(P) */ static Int /* $system_predicate(P) */
@ -2961,7 +2929,7 @@ p_hide_predicate(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2)); Term mod = Deref(ARG2);
restart_system_pred: restart_system_pred:
if (IsVarTerm(t1)) if (IsVarTerm(t1))
@ -3003,7 +2971,7 @@ p_hidden_predicate(void)
PredEntry *pe; PredEntry *pe;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2)); Term mod = Deref(ARG2);
restart_system_pred: restart_system_pred:
if (IsVarTerm(t1)) if (IsVarTerm(t1))
@ -3039,9 +3007,8 @@ p_hidden_predicate(void)
} }
static PredEntry * static PredEntry *
get_pred(Term t1, Term tmod, char *command) get_pred(Term t1, Term mod, char *command)
{ {
SMALLUNSGN mod = Yap_LookupModule(tmod);
restart_system_pred: restart_system_pred:
if (IsVarTerm(t1)) if (IsVarTerm(t1))
@ -3366,7 +3333,7 @@ p_nth_clause(void)
return FALSE; return FALSE;
} }
/* in case we have to index or to expand code */ /* in case we have to index or to expand code */
if (pe->ModuleOfPred != 2) { if (pe->ModuleOfPred != IDB_MODULE) {
UInt i; UInt i;
for (i = 1; i <= pe->ArityOfPE; i++) { for (i = 1; i <= pe->ArityOfPE; i++) {
@ -3545,8 +3512,7 @@ static Int
p_static_pred_statistics(void) p_static_pred_statistics(void)
{ {
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term tmod = Deref(ARG2); Term mod = Deref(ARG2);
SMALLUNSGN mod = Yap_LookupModule(tmod);
PredEntry *pe; PredEntry *pe;
if (IsVarTerm(t)) { if (IsVarTerm(t)) {

View File

@ -1145,7 +1145,7 @@ c_goal(Term Goal, int mod, compiler_struct *cglobs)
longjmp(cglobs->cint.CompilerBotch, 1); longjmp(cglobs->cint.CompilerBotch, 1);
} }
Goal = ArgOfTerm(2, Goal); Goal = ArgOfTerm(2, Goal);
mod = Yap_LookupModule(M); mod = M;
} }
if (IsVarTerm(Goal)) { if (IsVarTerm(Goal)) {
Goal = Yap_MkApplTerm(FunctorCall, 1, &Goal); Goal = Yap_MkApplTerm(FunctorCall, 1, &Goal);

View File

@ -74,7 +74,7 @@ Yap_AllocCMem (int size, struct intermediates *cip)
} }
int int
Yap_is_a_test_pred (Term arg, SMALLUNSGN mod) Yap_is_a_test_pred (Term arg, Term mod)
{ {
if (IsVarTerm (arg)) if (IsVarTerm (arg))
return FALSE; return FALSE;
@ -373,10 +373,13 @@ ShowOp (char *f, struct PSEUDO *cpc)
PredEntry *p = RepPredProp ((Prop) arg); PredEntry *p = RepPredProp ((Prop) arg);
Functor f = p->FunctorOfPred; Functor f = p->FunctorOfPred;
UInt arity = p->ArityOfPE; UInt arity = p->ArityOfPE;
SMALLUNSGN mod = 0; Term mod;
if (p->ModuleOfPred) mod = IntOfTerm(p->ModuleOfPred); if (p->ModuleOfPred)
Yap_plwrite (ModuleName[mod], Yap_DebugPutc, 0); mod = p->ModuleOfPred;
else
mod = TermProlog;
Yap_plwrite (mod, Yap_DebugPutc, 0);
Yap_DebugPutc (Yap_c_error_stream,':'); Yap_DebugPutc (Yap_c_error_stream,':');
if (arity == 0) if (arity == 0)
Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0); Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0);
@ -391,10 +394,10 @@ ShowOp (char *f, struct PSEUDO *cpc)
PredEntry *p = RepPredProp((Prop) rn); PredEntry *p = RepPredProp((Prop) rn);
Functor f = p->FunctorOfPred; Functor f = p->FunctorOfPred;
UInt arity = p->ArityOfPE; UInt arity = p->ArityOfPE;
SMALLUNSGN mod = 0; Term mod = TermProlog;
if (p->ModuleOfPred) mod = IntOfTerm(p->ModuleOfPred); if (p->ModuleOfPred) mod = p->ModuleOfPred;
Yap_plwrite (ModuleName[mod], Yap_DebugPutc, 0); Yap_plwrite (mod, Yap_DebugPutc, 0);
Yap_DebugPutc (Yap_c_error_stream,':'); Yap_DebugPutc (Yap_c_error_stream,':');
if (arity == 0) if (arity == 0)
Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0); Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0);

View File

@ -186,7 +186,7 @@ STATIC_PROTO(void linkblk,(link_entry *,CELL *,CELL));
STATIC_PROTO(CELL *linkcells,(CELL *,Int)); STATIC_PROTO(CELL *linkcells,(CELL *,Int));
#endif #endif
STATIC_PROTO(Int cmpclls,(CELL *,CELL *,Int)); STATIC_PROTO(Int cmpclls,(CELL *,CELL *,Int));
STATIC_PROTO(Prop FindDBProp,(AtomEntry *, int, unsigned int, SMALLUNSGN)); STATIC_PROTO(Prop FindDBProp,(AtomEntry *, int, unsigned int, Term));
STATIC_PROTO(CELL CalcKey, (Term)); STATIC_PROTO(CELL CalcKey, (Term));
#ifdef COROUTINING #ifdef COROUTINING
STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, CELL *,int *)); STATIC_PROTO(CELL *MkDBTerm, (CELL *, CELL *, CELL *, CELL *, CELL *, CELL *,int *));
@ -381,7 +381,7 @@ int Yap_DBTrailOverflow(void)
/* get DB entry for ap/arity; */ /* get DB entry for ap/arity; */
static Prop static Prop
FindDBPropHavingLock(AtomEntry *ae, int CodeDB, unsigned int arity, SMALLUNSGN dbmod) FindDBPropHavingLock(AtomEntry *ae, int CodeDB, unsigned int arity, Term dbmod)
{ {
Prop p0; Prop p0;
DBProp p; DBProp p;
@ -398,7 +398,7 @@ FindDBPropHavingLock(AtomEntry *ae, int CodeDB, unsigned int arity, SMALLUNSGN d
/* get DB entry for ap/arity; */ /* get DB entry for ap/arity; */
static Prop static Prop
FindDBProp(AtomEntry *ae, int CodeDB, unsigned int arity, SMALLUNSGN dbmod) FindDBProp(AtomEntry *ae, int CodeDB, unsigned int arity, Term dbmod)
{ {
Prop out; Prop out;
@ -2388,7 +2388,10 @@ UnifyDBKey(DBRef DBSP, PropFlags flags, Term t)
} }
if ((p->KindOfPE & CodeDBBit) && (flags & CodeDBBit)) { if ((p->KindOfPE & CodeDBBit) && (flags & CodeDBBit)) {
Term t[2]; Term t[2];
t[0] = ModuleName[p->ModuleOfDB]; if (p->ModuleOfDB)
t[0] = p->ModuleOfDB;
else
t[0] = TermProlog;
t[1] = t1; t[1] = t1;
tf = Yap_MkApplTerm(FunctorModule, 2, t); tf = Yap_MkApplTerm(FunctorModule, 2, t);
} else if (!(flags & CodeDBBit)) { } else if (!(flags & CodeDBBit)) {
@ -2609,7 +2612,7 @@ new_lu_int_key(Int key)
} }
fe = Yap_MkFunctor(Yap_FullLookupAtom("$integer"),3); fe = Yap_MkFunctor(Yap_FullLookupAtom("$integer"),3);
WRITE_LOCK(fe->FRWLock); WRITE_LOCK(fe->FRWLock);
p0 = Yap_NewPredPropByFunctor(fe,2); p0 = Yap_NewPredPropByFunctor(fe,IDB_MODULE);
p = RepPredProp(p0); p = RepPredProp(p0);
p->NextOfPE = INT_LU_KEYS[hash_key]; p->NextOfPE = INT_LU_KEYS[hash_key];
p->src.IndxId = key; p->src.IndxId = key;
@ -2631,15 +2634,15 @@ new_lu_entry(Term t)
Functor f = FunctorOfTerm(t); Functor f = FunctorOfTerm(t);
WRITE_LOCK(f->FRWLock); WRITE_LOCK(f->FRWLock);
p0 = Yap_NewPredPropByFunctor(f,2); p0 = Yap_NewPredPropByFunctor(f,IDB_MODULE);
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(t)) {
Atom at = AtomOfTerm(t); Atom at = AtomOfTerm(t);
WRITE_LOCK(RepAtom(at)->ARWLock); WRITE_LOCK(RepAtom(at)->ARWLock);
p0 = Yap_NewPredPropByAtom(at,2); p0 = Yap_NewPredPropByAtom(at,IDB_MODULE);
} else { } else {
WRITE_LOCK(FunctorList->FRWLock); WRITE_LOCK(FunctorList->FRWLock);
p0 = Yap_NewPredPropByFunctor(FunctorList,2); p0 = Yap_NewPredPropByFunctor(FunctorList,IDB_MODULE);
} }
pe = RepPredProp(p0); pe = RepPredProp(p0);
pe->PredFlags |= LogUpdatePredFlag; pe->PredFlags |= LogUpdatePredFlag;
@ -2696,11 +2699,11 @@ find_lu_entry(Term t)
Yap_Error(TYPE_ERROR_KEY, t, "while accessing database key"); Yap_Error(TYPE_ERROR_KEY, t, "while accessing database key");
return NULL; return NULL;
} }
p = Yap_GetPredPropByFuncInThisModule(FunctorOfTerm(t),2); p = Yap_GetPredPropByFuncInThisModule(FunctorOfTerm(t),IDB_MODULE);
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(t)) {
p = Yap_GetPredPropByAtomInThisModule(AtomOfTerm(t),2); p = Yap_GetPredPropByAtomInThisModule(AtomOfTerm(t),IDB_MODULE);
} else { } else {
p = Yap_GetPredPropByFuncInThisModule(FunctorList,2); p = Yap_GetPredPropByFuncInThisModule(FunctorList,IDB_MODULE);
} }
if (p == NIL) { if (p == NIL) {
if (UPDATE_MODE == UPDATE_MODE_LOGICAL && !find_entry(t)) { if (UPDATE_MODE == UPDATE_MODE_LOGICAL && !find_entry(t)) {
@ -2760,7 +2763,7 @@ FetchDBPropFromKey(Term twork, int flag, int new, char *error_mssg)
{ {
Atom At; Atom At;
Int arity; Int arity;
SMALLUNSGN dbmod; Term dbmod;
if (flag & MkCode) { if (flag & MkCode) {
if (IsVarTerm(twork)) { if (IsVarTerm(twork)) {
@ -2772,21 +2775,19 @@ FetchDBPropFromKey(Term twork, int flag, int new, char *error_mssg)
return RepDBProp(NULL); return RepDBProp(NULL);
} else { } else {
Functor f = FunctorOfTerm(twork); Functor f = FunctorOfTerm(twork);
Term tmod;
if (f != FunctorModule) { if (f != FunctorModule) {
Yap_Error(SYSTEM_ERROR, twork, "missing module"); Yap_Error(SYSTEM_ERROR, twork, "missing module");
return RepDBProp(NULL); return RepDBProp(NULL);
} }
tmod = ArgOfTerm(1, twork); dbmod = ArgOfTerm(1, twork);
if (IsVarTerm(tmod)) { if (IsVarTerm(dbmod)) {
Yap_Error(INSTANTIATION_ERROR, twork, "var in module"); Yap_Error(INSTANTIATION_ERROR, twork, "var in module");
return(RepDBProp(NIL)); return(RepDBProp(NIL));
} }
if (!IsAtomTerm(tmod)) { if (!IsAtomTerm(dbmod)) {
Yap_Error(TYPE_ERROR_ATOM, twork, "not atom in module"); Yap_Error(TYPE_ERROR_ATOM, twork, "not atom in module");
return(RepDBProp(NIL)); return(RepDBProp(NIL));
} }
dbmod = Yap_LookupModule(tmod);
twork = ArgOfTerm(2, twork); twork = ArgOfTerm(2, twork);
} }
} else { } else {
@ -4193,7 +4194,7 @@ p_erase_clause(void)
if (entryref->Flags & StaticMask) { if (entryref->Flags & StaticMask) {
if (entryref->Flags & ErasedMask) if (entryref->Flags & ErasedMask)
return FALSE; return FALSE;
Yap_EraseStaticClause((StaticClause *)entryref, Yap_LookupModule(Deref(ARG2))); Yap_EraseStaticClause((StaticClause *)entryref, Deref(ARG2));
return TRUE; return TRUE;
} }
EraseEntry(entryref); EraseEntry(entryref);
@ -4446,9 +4447,12 @@ p_instance_module(void)
if (cl->ClFlags & ErasedMask) { if (cl->ClFlags & ErasedMask) {
return FALSE; return FALSE;
} }
return Yap_unify(ARG2, ModuleName[cl->ClPred->ModuleOfPred]); if (cl->ClPred->ModuleOfPred)
return Yap_unify(ARG2, cl->ClPred->ModuleOfPred);
else
return Yap_unify(ARG2, TermProlog);
} else { } else {
return Yap_unify(ARG2, ModuleName[dbr->Parent->ModuleOfDB]); return Yap_unify(ARG2, dbr->Parent->ModuleOfDB);
} }
} }
@ -4920,8 +4924,7 @@ p_install_thread_local(void)
#if THREADS #if THREADS
PredEntry *pe; PredEntry *pe;
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
SMALLUNSGN mod = Yap_LookupModule(t2);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
return (FALSE); return (FALSE);

View File

@ -107,15 +107,15 @@ DumpActiveGoals (void)
if (pe->PredFlags & (CompiledPredFlag | DynamicPredFlag | FastPredFlag)) if (pe->PredFlags & (CompiledPredFlag | DynamicPredFlag | FastPredFlag))
{ {
Functor f; Functor f;
SMALLUNSGN mod = 0; Term mod = TermProlog;
f = pe->FunctorOfPred; f = pe->FunctorOfPred;
if (pe->KindOfPE && hidden (NameOfFunctor (f))) if (pe->KindOfPE && hidden (NameOfFunctor (f)))
goto next; goto next;
if (first++ == 1) if (first++ == 1)
fprintf(stderr,"Active ancestors:\n"); fprintf(stderr,"Active ancestors:\n");
if (pe->ModuleOfPred) mod = IntOfTerm(pe->ModuleOfPred); if (pe->ModuleOfPred) mod = pe->ModuleOfPred;
Yap_plwrite (ModuleName[mod], Yap_DebugPutc, 0); Yap_plwrite (mod, Yap_DebugPutc, 0);
Yap_DebugPutc (Yap_c_error_stream,':'); Yap_DebugPutc (Yap_c_error_stream,':');
if (pe->ArityOfPE == 0) { if (pe->ArityOfPE == 0) {
Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0); Yap_plwrite (MkAtomTerm ((Atom)f), Yap_DebugPutc, 0);
@ -162,11 +162,13 @@ DumpActiveGoals (void)
READ_LOCK(pe->PRWLock); READ_LOCK(pe->PRWLock);
{ {
Functor f; Functor f;
SMALLUNSGN mod = 0; Term mod = PROLOG_MODULE;
f = pe->FunctorOfPred; f = pe->FunctorOfPred;
if (pe->ModuleOfPred) mod = IntOfTerm(pe->ModuleOfPred); if (pe->ModuleOfPred)
Yap_plwrite (ModuleName[mod], Yap_DebugPutc, 0); mod = pe->ModuleOfPred;
else mod = TermProlog;
Yap_plwrite (mod, Yap_DebugPutc, 0);
Yap_DebugPutc (Yap_c_error_stream,':'); Yap_DebugPutc (Yap_c_error_stream,':');
if (pe->ArityOfPE == 0) { if (pe->ArityOfPE == 0) {
Yap_plwrite (MkAtomTerm (NameOfFunctor(f)), Yap_DebugPutc, 0); Yap_plwrite (MkAtomTerm (NameOfFunctor(f)), Yap_DebugPutc, 0);
@ -194,7 +196,7 @@ detect_bug_location(yamop *yap_pc, char *tp, int psize)
{ {
Atom pred_name; Atom pred_name;
UInt pred_arity; UInt pred_arity;
SMALLUNSGN pred_module; Term pred_module;
Int cl; Int cl;
if ((cl = Yap_PredForCode(yap_pc, &pred_name, &pred_arity, &pred_module)) if ((cl = Yap_PredForCode(yap_pc, &pred_name, &pred_arity, &pred_module))
@ -211,22 +213,18 @@ detect_bug_location(yamop *yap_pc, char *tp, int psize)
/* don't give info on system predicates */ /* don't give info on system predicates */
#if HAVE_SNPRINTF #if HAVE_SNPRINTF
#if SHORT_INTS #if SHORT_INTS
snprintf(tp, psize, "%s:%s/%ld", snprintf(tp, psize, "prolog:%s/%ld",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
snprintf(tp, psize, "%s:%s/%d", snprintf(tp, psize, "prolog:%s/%d",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#else #else
#if SHORT_INTS #if SHORT_INTS
sprintf(tp, "in %s:%s/%ld", sprintf(tp, "in prolog:%s/%ld",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
sprintf(tp, "in %s:%s/%d", sprintf(tp, "in prolog:%s/%d",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#endif #endif
@ -234,21 +232,21 @@ detect_bug_location(yamop *yap_pc, char *tp, int psize)
#if HAVE_SNPRINTF #if HAVE_SNPRINTF
#if SHORT_INTS #if SHORT_INTS
snprintf(tp, psize, "indexing code of %s:%s/%ld", snprintf(tp, psize, "indexing code of %s:%s/%ld",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
snprintf(tp, psize, "indexing code of %s:%s/%d", snprintf(tp, psize, "indexing code of %s:%s/%d",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#else #else
#if SHORT_INTS #if SHORT_INTS
sprintf(tp, "indexing code of %s:%s/%ld", sprintf(tp, "indexing code of %s:%s/%ld",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
sprintf(tp, "indexing code of %s:%s/%d", sprintf(tp, "indexing code of %s:%s/%d",
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#endif #endif
@ -256,21 +254,21 @@ detect_bug_location(yamop *yap_pc, char *tp, int psize)
#if HAVE_SNPRINTF #if HAVE_SNPRINTF
#if SHORT_INTS #if SHORT_INTS
snprintf(tp, psize, "clause %ld of %s:%s/%ld", cl, snprintf(tp, psize, "clause %ld of %s:%s/%ld", cl,
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
snprintf(tp, psize, "clause %d of %s:%s/%d", cl, snprintf(tp, psize, "clause %d of %s:%s/%d", cl,
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#else #else
#if SHORT_INTS #if SHORT_INTS
sprintf(tp, "clause %ld of %s:%s/%ld", cl, sprintf(tp, "clause %ld of %s:%s/%ld", cl,
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#else #else
sprintf(tp, "clause %d of %s:%s/%d", cl, sprintf(tp, "clause %d of %s:%s/%d", cl,
RepAtom(AtomOfTerm(ModuleName[pred_module]))->StrOfAE, RepAtom(AtomOfTerm(pred_module))->StrOfAE,
RepAtom(pred_name)->StrOfAE, pred_arity); RepAtom(pred_name)->StrOfAE, pred_arity);
#endif #endif
#endif #endif

View File

@ -22,7 +22,7 @@ static char SccsId[] = "@(#)cdmgr.c 1.1 05/02/98";
#include "yapio.h" #include "yapio.h"
STATIC_PROTO(Int CallPredicate, (PredEntry *, choiceptr)); STATIC_PROTO(Int CallPredicate, (PredEntry *, choiceptr));
STATIC_PROTO(Int EnterCreepMode, (Term, SMALLUNSGN)); STATIC_PROTO(Int EnterCreepMode, (Term, Term));
STATIC_PROTO(Int CallClause, (PredEntry *, Int)); STATIC_PROTO(Int CallClause, (PredEntry *, Int));
STATIC_PROTO(Int p_save_cp, (void)); STATIC_PROTO(Int p_save_cp, (void));
STATIC_PROTO(Int p_execute, (void)); STATIC_PROTO(Int p_execute, (void));
@ -74,25 +74,25 @@ CallPredicate(PredEntry *pen, choiceptr cut_pt) {
} }
inline static Int inline static Int
CallMetaCall(SMALLUNSGN mod) { CallMetaCall(Term mod) {
ARG2 = cp_as_integer(B); /* p_save_cp */ ARG2 = cp_as_integer(B); /* p_save_cp */
ARG3 = ARG1; ARG3 = ARG1;
ARG4 = ModuleName[mod]; ARG4 = mod;
return (CallPredicate(PredMetaCall, B)); return (CallPredicate(PredMetaCall, B));
} }
Term Term
Yap_ExecuteCallMetaCall(SMALLUNSGN mod) { Yap_ExecuteCallMetaCall(Term mod) {
Term ts[4]; Term ts[4];
ts[0] = ARG1; ts[0] = ARG1;
ts[1] = cp_as_integer(B); /* p_save_cp */ ts[1] = cp_as_integer(B); /* p_save_cp */
ts[2] = ARG1; ts[2] = ARG1;
ts[3] = ModuleName[mod]; ts[3] = mod;
return(Yap_MkApplTerm(PredMetaCall->FunctorOfPred,4,ts)); return(Yap_MkApplTerm(PredMetaCall->FunctorOfPred,4,ts));
} }
static Int static Int
CallError(yap_error_number err, SMALLUNSGN mod) CallError(yap_error_number err, Term mod)
{ {
if (yap_flags[LANGUAGE_MODE_FLAG] == 1) { if (yap_flags[LANGUAGE_MODE_FLAG] == 1) {
return(CallMetaCall(mod)); return(CallMetaCall(mod));
@ -213,7 +213,7 @@ p_save_cp(void)
} }
inline static Int inline static Int
do_execute(Term t, SMALLUNSGN mod) do_execute(Term t, Term mod)
{ {
if (ActiveSignals) { if (ActiveSignals) {
return(EnterCreepMode(t, mod)); return(EnterCreepMode(t, mod));
@ -242,7 +242,7 @@ do_execute(Term t, SMALLUNSGN mod)
if (f == FunctorModule) { if (f == FunctorModule) {
Term tmod = ArgOfTerm(1,t); Term tmod = ArgOfTerm(1,t);
if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) { if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) {
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2,t); t = ArgOfTerm(2,t);
goto restart_exec; goto restart_exec;
} }
@ -287,7 +287,7 @@ do_execute(Term t, SMALLUNSGN mod)
} }
static Int static Int
EnterCreepMode(Term t, SMALLUNSGN mod) { EnterCreepMode(Term t, Term mod) {
PredEntry *PredCreep; PredEntry *PredCreep;
if (ActiveSignals & YAP_CDOVF_SIGNAL) { if (ActiveSignals & YAP_CDOVF_SIGNAL) {
@ -300,7 +300,11 @@ EnterCreepMode(Term t, SMALLUNSGN mod) {
} }
} }
PredCreep = RepPredProp(PredPropByFunc(FunctorCreep,1)); PredCreep = RepPredProp(PredPropByFunc(FunctorCreep,1));
ARG1 = MkPairTerm(ModuleName[mod],ARG1); if (mod) {
ARG1 = MkPairTerm(mod,ARG1);
} else {
ARG1 = MkPairTerm(TermProlog,ARG1);
}
LOCK(SignalLock); LOCK(SignalLock);
CreepFlag = CalculateStackGap(); CreepFlag = CalculateStackGap();
UNLOCK(SignalLock); UNLOCK(SignalLock);
@ -325,10 +329,9 @@ static Int
p_execute0(void) p_execute0(void)
{ /* '$execute0'(Goal,Mod) */ { /* '$execute0'(Goal,Mod) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Term tmod = Deref(ARG2); Term mod = Deref(ARG2);
unsigned int arity; unsigned int arity;
Prop pe; Prop pe;
SMALLUNSGN mod = Yap_LookupModule(tmod);
restart_exec: restart_exec:
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
@ -347,7 +350,7 @@ p_execute0(void)
if (f == FunctorModule) { if (f == FunctorModule) {
Term tmod = ArgOfTerm(1,t); Term tmod = ArgOfTerm(1,t);
if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) { if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) {
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2,t); t = ArgOfTerm(2,t);
goto restart_exec; goto restart_exec;
} }
@ -382,7 +385,7 @@ static Int
p_execute_0(void) p_execute_0(void)
{ /* '$execute_0'(Goal) */ { /* '$execute_0'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2)); Term mod = Deref(ARG2);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -419,7 +422,7 @@ static Int
p_execute_1(void) p_execute_1(void)
{ /* '$execute_0'(Goal) */ { /* '$execute_0'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG3)); Term mod = Deref(ARG3);
Prop pe; Prop pe;
if (!IsAtomTerm(t)) { if (!IsAtomTerm(t)) {
@ -465,7 +468,7 @@ static Int
p_execute_2(void) p_execute_2(void)
{ /* '$execute_2'(Goal) */ { /* '$execute_2'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG4)); Term mod = Deref(ARG4);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -510,7 +513,7 @@ static Int
p_execute_3(void) p_execute_3(void)
{ /* '$execute_3'(Goal) */ { /* '$execute_3'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG5)); Term mod = Deref(ARG5);
Prop pe; Prop pe;
if (!IsAtomTerm(t)) { if (!IsAtomTerm(t)) {
@ -562,7 +565,7 @@ static Int
p_execute_4(void) p_execute_4(void)
{ /* '$execute_4'(Goal) */ { /* '$execute_4'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG6)); Term mod = Deref(ARG6);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -613,7 +616,7 @@ static Int
p_execute_5(void) p_execute_5(void)
{ /* '$execute_5'(Goal) */ { /* '$execute_5'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG7)); Term mod = Deref(ARG7);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -667,7 +670,7 @@ static Int
p_execute_6(void) p_execute_6(void)
{ /* '$execute_6'(Goal) */ { /* '$execute_6'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG8)); Term mod = Deref(ARG8);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -724,7 +727,7 @@ static Int
p_execute_7(void) p_execute_7(void)
{ /* '$execute_7'(Goal) */ { /* '$execute_7'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG9)); Term mod = Deref(ARG9);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -784,7 +787,7 @@ static Int
p_execute_8(void) p_execute_8(void)
{ /* '$execute_8'(Goal) */ { /* '$execute_8'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG10)); Term mod = Deref(ARG10);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -847,7 +850,7 @@ static Int
p_execute_9(void) p_execute_9(void)
{ /* '$execute_9'(Goal) */ { /* '$execute_9'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG11)); Term mod = Deref(ARG11);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -913,7 +916,7 @@ static Int
p_execute_10(void) p_execute_10(void)
{ /* '$execute_10'(Goal) */ { /* '$execute_10'(Goal) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG12)); Term mod = Deref(ARG12);
Prop pe; Prop pe;
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -1003,11 +1006,10 @@ p_pred_goal_expansion_on(void) {
static Int static Int
p_at_execute(void) p_at_execute(void)
{ /* '$execute'(Goal,ClauseNumber) */ { /* '$execute'(Goal,ClauseNumber) */
Term t = Deref(ARG1), tmod = Deref(ARG2), t2 = Deref(ARG3); Term t = Deref(ARG1), mod = Deref(ARG2), t2 = Deref(ARG3);
unsigned int arity; unsigned int arity;
Prop pe; Prop pe;
Atom a; Atom a;
SMALLUNSGN mod = Yap_LookupModule(tmod);
restart_exec: restart_exec:
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -1024,7 +1026,7 @@ p_at_execute(void)
if (f == FunctorModule) { if (f == FunctorModule) {
Term tmod = ArgOfTerm(1,t); Term tmod = ArgOfTerm(1,t);
if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) { if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) {
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2,t); t = ArgOfTerm(2,t);
goto restart_exec; goto restart_exec;
} }
@ -1176,7 +1178,7 @@ Yap_exec_absmi(int top)
Int Int
Yap_execute_goal(Term t, int nargs, SMALLUNSGN mod) Yap_execute_goal(Term t, int nargs, Term mod)
{ {
Int out; Int out;
yamop *CodeAdr; yamop *CodeAdr;
@ -1307,7 +1309,7 @@ Yap_RunTopGoal(Term t)
PredEntry *ppe; PredEntry *ppe;
CELL *pt; CELL *pt;
UInt arity; UInt arity;
SMALLUNSGN mod = CurrentModule; Term mod = CurrentModule;
int goal_out = 0; int goal_out = 0;
restart_runtopgoal: restart_runtopgoal:
@ -1326,7 +1328,7 @@ Yap_RunTopGoal(Term t)
if (f == FunctorModule) { if (f == FunctorModule) {
Term tmod = ArgOfTerm(1,t); Term tmod = ArgOfTerm(1,t);
if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) { if (!IsVarTerm(tmod) && IsAtomTerm(tmod)) {
mod = Yap_LookupModule(tmod); mod = tmod;
t = ArgOfTerm(2,t); t = ArgOfTerm(2,t);
goto restart_runtopgoal; goto restart_runtopgoal;
} }
@ -1531,7 +1533,7 @@ p_jump_env(void) {
static Int static Int
p_generate_pred_info(void) { p_generate_pred_info(void) {
ARG1 = ARG3 = ENV[-EnvSizeInCells-1]; ARG1 = ARG3 = ENV[-EnvSizeInCells-1];
ARG4 = ModuleName[IntOfTerm(ENV[-EnvSizeInCells-3])]; ARG4 = ENV[-EnvSizeInCells-3];
ARG2 = cp_as_integer((choiceptr)ENV[E_CB]); ARG2 = cp_as_integer((choiceptr)ENV[E_CB]);
return TRUE; return TRUE;
} }

View File

@ -1473,7 +1473,7 @@ mark_choicepoints(register choiceptr gc_B, tr_fr_ptr saved_TR, int very_verbose)
{ {
Atom at; Atom at;
UInt arity; UInt arity;
SMALLUNSGN mod; Term mod;
if (Yap_PredForCode(gc_B->cp_ap, &at, &arity, &mod)) { if (Yap_PredForCode(gc_B->cp_ap, &at, &arity, &mod)) {
if (arity) if (arity)
fprintf(Yap_stderr,"[GC] %s/%ld marked %ld (%s)\n", RepAtom(at)->StrOfAE, (long int)arity, total_marked, op_names[opnum]); fprintf(Yap_stderr,"[GC] %s/%ld marked %ld (%s)\n", RepAtom(at)->StrOfAE, (long int)arity, total_marked, op_names[opnum]);

View File

@ -1943,7 +1943,7 @@ static void
add_arg_info(ClauseDef *clause, PredEntry *ap, UInt argno) add_arg_info(ClauseDef *clause, PredEntry *ap, UInt argno)
{ {
yamop *cl; yamop *cl;
if (ap->ModuleOfPred == 2) { if (ap->ModuleOfPred == IDB_MODULE) {
cl = clause->Code; cl = clause->Code;
} else { } else {
cl = clause->u.WorkPC; cl = clause->u.WorkPC;
@ -2179,7 +2179,7 @@ skip_to_arg(ClauseDef *clause, PredEntry *ap, UInt argno, int at_point)
{ {
yamop *cl; yamop *cl;
int done = FALSE; int done = FALSE;
if (ap->ModuleOfPred == 2) { if (ap->ModuleOfPred == IDB_MODULE) {
return; return;
} else { } else {
cl = clause->CurrentCode; cl = clause->CurrentCode;
@ -3075,7 +3075,7 @@ do_index(ClauseDef *min, ClauseDef* max, struct intermediates *cint, UInt argno,
ngroups = groups_in(min, max, group); ngroups = groups_in(min, max, group);
if (IsVarTerm(t) && if (IsVarTerm(t) &&
max - min > 2 && max - min > 2 &&
ap->ModuleOfPred != 2) { ap->ModuleOfPred != IDB_MODULE) {
lablx = new_label(); lablx = new_label();
Yap_emit(label_op, lablx, Zero, cint); Yap_emit(label_op, lablx, Zero, cint);
while (IsVarTerm(t)) { while (IsVarTerm(t)) {
@ -4181,12 +4181,13 @@ ExpandIndex(PredEntry *ap) {
Yap_Error_Size = 0; Yap_Error_Size = 0;
#ifdef DEBUG #ifdef DEBUG
if (Yap_Option['i' - 'a' + 1]) { if (Yap_Option['i' - 'a' + 1]) {
Term tmod = ModuleName[ap->ModuleOfPred]; Term tmod = ap->ModuleOfPred;
if (!tmod) tmod = TermProlog;
Yap_DebugPutc(Yap_c_error_stream,'>'); Yap_DebugPutc(Yap_c_error_stream,'>');
Yap_DebugPutc(Yap_c_error_stream,'\t'); Yap_DebugPutc(Yap_c_error_stream,'\t');
Yap_plwrite(tmod, Yap_DebugPutc, 0); Yap_plwrite(tmod, Yap_DebugPutc, 0);
Yap_DebugPutc(Yap_c_error_stream,':'); Yap_DebugPutc(Yap_c_error_stream,':');
if (ap->ModuleOfPred == 2) { if (ap->ModuleOfPred == IDB_MODULE) {
Term t = Deref(ARG1); Term t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Yap_plwrite(t, Yap_DebugPutc, 0); Yap_plwrite(t, Yap_DebugPutc, 0);
@ -5596,12 +5597,13 @@ Yap_AddClauseToIndex(PredEntry *ap, yamop *beg, int first) {
Yap_ErrorMessage = NULL; Yap_ErrorMessage = NULL;
#ifdef DEBUG #ifdef DEBUG
if (Yap_Option['i' - 'a' + 1]) { if (Yap_Option['i' - 'a' + 1]) {
Term tmod = ModuleName[ap->ModuleOfPred]; Term tmod = ap->ModuleOfPred;
if (!tmod) tmod = TermProlog;
Yap_DebugPutc(Yap_c_error_stream,'+'); Yap_DebugPutc(Yap_c_error_stream,'+');
Yap_DebugPutc(Yap_c_error_stream,'\t'); Yap_DebugPutc(Yap_c_error_stream,'\t');
Yap_plwrite(tmod, Yap_DebugPutc, 0); Yap_plwrite(tmod, Yap_DebugPutc, 0);
Yap_DebugPutc(Yap_c_error_stream,':'); Yap_DebugPutc(Yap_c_error_stream,':');
if (ap->ModuleOfPred == 2) { if (ap->ModuleOfPred == IDB_MODULE) {
Term t = Deref(ARG1); Term t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
Yap_plwrite(t, Yap_DebugPutc, 0); Yap_plwrite(t, Yap_DebugPutc, 0);
@ -6101,13 +6103,14 @@ Yap_RemoveClauseFromIndex(PredEntry *ap, yamop *beg) {
Yap_ErrorMessage = NULL; Yap_ErrorMessage = NULL;
#ifdef DEBUG #ifdef DEBUG
if (Yap_Option['i' - 'a' + 1]) { if (Yap_Option['i' - 'a' + 1]) {
Term tmod = ModuleName[ap->ModuleOfPred]; Term tmod = ap->ModuleOfPred;
if (!tmod) tmod = TermProlog;
Yap_DebugPutc(Yap_c_error_stream,'-'); Yap_DebugPutc(Yap_c_error_stream,'-');
Yap_DebugPutc(Yap_c_error_stream,'\t'); Yap_DebugPutc(Yap_c_error_stream,'\t');
Yap_plwrite(tmod, Yap_DebugPutc, 0); Yap_plwrite(tmod, Yap_DebugPutc, 0);
Yap_DebugPutc(Yap_c_error_stream,':'); Yap_DebugPutc(Yap_c_error_stream,':');
if (ap->ModuleOfPred != 2) { if (ap->ModuleOfPred != IDB_MODULE) {
if (ap->ArityOfPE == 0) { if (ap->ArityOfPE == 0) {
Atom At = (Atom)ap->FunctorOfPred; Atom At = (Atom)ap->FunctorOfPred;
Yap_plwrite(MkAtomTerm(At), Yap_DebugPutc, 0); Yap_plwrite(MkAtomTerm(At), Yap_DebugPutc, 0);
@ -6248,7 +6251,7 @@ Yap_FollowIndexingCode(PredEntry *ap, yamop *ipc, Term t1, Term tb, Term tr, yam
yamop **jlbl = NULL; yamop **jlbl = NULL;
int lu_pred = ap->PredFlags & LogUpdatePredFlag; int lu_pred = ap->PredFlags & LogUpdatePredFlag;
if (ap->ModuleOfPred != 2) { if (ap->ModuleOfPred != IDB_MODULE) {
if (ap->ArityOfPE) { if (ap->ArityOfPE) {
CELL *tar = RepAppl(t1); CELL *tar = RepAppl(t1);
UInt i; UInt i;
@ -6623,7 +6626,7 @@ Yap_NthClause(PredEntry *ap, Int ncls)
else if (ncls < 0) else if (ncls < 0)
return NULL; return NULL;
if (ap->ModuleOfPred != 2) { if (ap->ModuleOfPred != IDB_MODULE) {
if (ap->ArityOfPE) { if (ap->ArityOfPE) {
UInt i; UInt i;

View File

@ -495,10 +495,7 @@ Yap_InitCPred(char *Name, unsigned long int Arity, CPredicate code, int flags)
} }
p_code->opc = Yap_opcode(_procceed); p_code->opc = Yap_opcode(_procceed);
pe->OpcodeOfPred = pe->CodeOfPred->opc; pe->OpcodeOfPred = pe->CodeOfPred->opc;
{ pe->ModuleOfPred = CurrentModule;
Term mod = CurrentModule;
pe->ModuleOfPred = mod;
}
} }
void void
@ -716,6 +713,12 @@ InitCodes(void)
Functor Functor
FunctorThrow; FunctorThrow;
heap_regs->user_module = MkAtomTerm(Yap_LookupAtom("user"));
heap_regs->idb_module = MkAtomTerm(Yap_LookupAtom("idb"));
heap_regs->attributes_module = MkAtomTerm(Yap_LookupAtom("attributes"));
heap_regs->charsio_module = MkAtomTerm(Yap_LookupAtom("charsio"));
heap_regs->terms_module = MkAtomTerm(Yap_LookupAtom("terms"));
Yap_InitModules();
#ifdef YAPOR #ifdef YAPOR
heap_regs->seq_def = TRUE; heap_regs->seq_def = TRUE;
heap_regs->getworkfirsttimecode.opc = Yap_opcode(_getwork_first_time); heap_regs->getworkfirsttimecode.opc = Yap_opcode(_getwork_first_time);
@ -1006,26 +1009,26 @@ InitCodes(void)
heap_regs->env_for_yes_code.p = heap_regs->env_for_yes_code.p =
heap_regs->env_for_yes_code.p0 = heap_regs->env_for_yes_code.p0 =
RepPredProp(PredPropByAtom(heap_regs->atom_true,0)); RepPredProp(PredPropByAtom(heap_regs->atom_true,0));
heap_regs->pred_meta_call = RepPredProp(PredPropByFunc(Yap_MkFunctor(heap_regs->atom_meta_call,4),0)); heap_regs->pred_meta_call = RepPredProp(PredPropByFunc(Yap_MkFunctor(heap_regs->atom_meta_call,4),PROLOG_MODULE));
heap_regs->pred_dollar_catch = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$catch"),3),0)); heap_regs->pred_dollar_catch = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$catch"),3),PROLOG_MODULE));
heap_regs->pred_recorded_with_key = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$recorded_with_key"),3),0)); heap_regs->pred_recorded_with_key = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$recorded_with_key"),3),PROLOG_MODULE));
heap_regs->pred_log_upd_clause = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_log_upd_clause"),5),0)); heap_regs->pred_log_upd_clause = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_log_upd_clause"),5),PROLOG_MODULE));
heap_regs->pred_log_upd_clause0 = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_log_upd_clause"),4),0)); heap_regs->pred_log_upd_clause0 = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_log_upd_clause"),4),PROLOG_MODULE));
heap_regs->pred_static_clause = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_static_clause"),5),0)); heap_regs->pred_static_clause = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$do_static_clause"),5),PROLOG_MODULE));
heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,0)); heap_regs->pred_throw = RepPredProp(PredPropByFunc(FunctorThrow,PROLOG_MODULE));
heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$handle_throw"),3),0)); heap_regs->pred_handle_throw = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_FullLookupAtom("$handle_throw"),3),PROLOG_MODULE));
heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom("goal_expansion"),3),1)); heap_regs->pred_goal_expansion = RepPredProp(PredPropByFunc(Yap_MkFunctor(Yap_LookupAtom("goal_expansion"),3),USER_MODULE));
heap_regs->env_for_trustfail_code.p = heap_regs->env_for_trustfail_code.p =
heap_regs->env_for_trustfail_code.p0 = heap_regs->env_for_trustfail_code.p0 =
RepPredProp(PredPropByAtom(heap_regs->atom_false,0)); RepPredProp(PredPropByAtom(heap_regs->atom_false,PROLOG_MODULE));
{ {
/* make sure we know about the module predicate */ /* make sure we know about the module predicate */
PredEntry *modp = RepPredProp(PredPropByFunc(heap_regs->functor_module,0)); PredEntry *modp = RepPredProp(PredPropByFunc(heap_regs->functor_module,PROLOG_MODULE));
modp->PredFlags |= MetaPredFlag; modp->PredFlags |= MetaPredFlag;
} }
#ifdef YAPOR #ifdef YAPOR
heap_regs->getworkcode.u.ld.p = RepPredProp(PredPropByAtom(Yap_FullLookupAtom("$getwork"), 0)); heap_regs->getworkcode.u.ld.p = RepPredProp(PredPropByAtom(Yap_FullLookupAtom("$getwork"), PROLOG_MODULE));
heap_regs->getworkcode_seq.u.ld.p = RepPredProp(PredPropByAtom(Yap_FullLookupAtom("$getwork_seq"), 0)); heap_regs->getworkcode_seq.u.ld.p = RepPredProp(PredPropByAtom(Yap_FullLookupAtom("$getwork_seq"), PROLOG_MODULE));
#endif #endif
heap_regs->db_erased_marker = heap_regs->db_erased_marker =
(DBRef)Yap_AllocCodeSpace(sizeof(DBStruct)); (DBRef)Yap_AllocCodeSpace(sizeof(DBStruct));
@ -1181,7 +1184,6 @@ Yap_InitWorkspace(int Heap,
#else #else
Yap_InitAbsmi(); Yap_InitAbsmi();
#endif #endif
Yap_InitModules();
InitCodes(); InitCodes();
InitOps(); InitOps();
InitDebug(); InitDebug();

View File

@ -118,7 +118,7 @@ void
Yap_ReOpenLoadForeign(void) Yap_ReOpenLoadForeign(void)
{ {
ForeignObj *f_code = ForeignCodeLoaded; ForeignObj *f_code = ForeignCodeLoaded;
SMALLUNSGN OldModule = CurrentModule; Term OldModule = CurrentModule;
YapInitProc InitProc = NULL; YapInitProc InitProc = NULL;
while (f_code != NULL) { while (f_code != NULL) {

View File

@ -27,10 +27,9 @@ STATIC_PROTO(Int p_current_module1, (void));
#define ByteAdr(X) ((char *) &(X)) #define ByteAdr(X) ((char *) &(X))
Term Term
Yap_Module_Name(CODEADDR cap) Yap_Module_Name(PredEntry *ap)
{ {
PredEntry *ap = (PredEntry *)cap; Term mod;
if (!ap->ModuleOfPred) if (!ap->ModuleOfPred)
/* If the system predicate is a metacall I should return the /* If the system predicate is a metacall I should return the
module for the metacall, which I will suppose has to be module for the metacall, which I will suppose has to be
@ -39,20 +38,22 @@ Yap_Module_Name(CODEADDR cap)
So I will return the current module in case the system So I will return the current module in case the system
predicate is a meta-call. Otherwise it will still work. predicate is a meta-call. Otherwise it will still work.
*/ */
return(ModuleName[CurrentModule]); mod = CurrentModule;
else { else {
return (ModuleName[ap->ModuleOfPred]); mod = ap->ModuleOfPred;
} }
if (mod) return mod;
return TermProlog;
} }
static SMALLUNSGN static Term
LookupModule(Term a) LookupModule(Term a)
{ {
unsigned int i; unsigned int i;
for (i = 0; i < NoOfModules; ++i) { for (i = 0; i < NoOfModules; ++i) {
if (ModuleName[i] == a) { if (ModuleName[i] == a) {
return (i); return i;
} }
} }
ModuleName[i = NoOfModules++] = a; ModuleName[i = NoOfModules++] = a;
@ -62,10 +63,18 @@ LookupModule(Term a)
return (i); return (i);
} }
SMALLUNSGN struct pred_entry *
Yap_LookupModule(Term a) Yap_ModulePred(Term mod)
{ {
return(LookupModule(a)); return ModulePred[LookupModule(mod)];
}
void
Yap_NewModulePred(Term mod, struct pred_entry *ap)
{
Term imod = LookupModule(mod);
ap->NextPredOfModule = ModulePred[imod];
ModulePred[imod] = ap;
} }
static Int static Int
@ -73,44 +82,40 @@ p_current_module(void)
{ /* $current_module(Old,New) */ { /* $current_module(Old,New) */
Term t; Term t;
if (!Yap_unify_constant(ARG1, ModuleName[CurrentModule])) if (CurrentModule) {
return (0); if(!Yap_unify_constant(ARG1, CurrentModule))
return FALSE;
} else {
if (!Yap_unify_constant(ARG1, TermProlog))
return FALSE;
}
t = Deref(ARG2); t = Deref(ARG2);
if (IsVarTerm(t) || !IsAtomTerm(t)) if (IsVarTerm(t) || !IsAtomTerm(t))
return (0); return FALSE;
CurrentModule = LookupModule(t); if (t == TermProlog) {
CurrentModule = 0;
} else {
CurrentModule = t;
LookupModule(CurrentModule);
}
return (TRUE); return (TRUE);
} }
static Int static Int
p_current_module1(void) p_current_module1(void)
{ /* $current_module(Old) */ { /* $current_module(Old) */
if (!Yap_unify_constant(ARG1, ModuleName[CurrentModule])) if (CurrentModule)
return (0); return Yap_unify_constant(ARG1, CurrentModule);
return (1); return Yap_unify_constant(ARG1, TermProlog);
} }
static Int static Int
p_change_module(void) p_change_module(void)
{ /* $change_module(New) */ { /* $change_module(New) */
SMALLUNSGN mod = LookupModule(Deref(ARG1)); Term mod = Deref(ARG1);
LookupModule(mod);
CurrentModule = mod; CurrentModule = mod;
return (TRUE); return TRUE;
}
static Int
p_module_number(void)
{ /* $module_number(Mod,Num) */
Term tname = Deref(ARG1);
Term t;
if (IsVarTerm(tname)) {
return(Yap_unify(tname, ModuleName[IntOfTerm(Deref(ARG2))]));
} else {
t = MkIntTerm(LookupModule(Deref(ARG1)));
Yap_unify(t,ARG2);
ARG2 = t;
}
return(TRUE);
} }
static Int static Int
@ -139,7 +144,6 @@ Yap_InitModulesC(void)
Yap_InitCPred("$current_module", 2, p_current_module, SafePredFlag|SyncPredFlag); Yap_InitCPred("$current_module", 2, p_current_module, SafePredFlag|SyncPredFlag);
Yap_InitCPred("$current_module", 1, p_current_module1, SafePredFlag|SyncPredFlag); Yap_InitCPred("$current_module", 1, p_current_module1, SafePredFlag|SyncPredFlag);
Yap_InitCPred("$change_module", 1, p_change_module, SafePredFlag|SyncPredFlag); Yap_InitCPred("$change_module", 1, p_change_module, SafePredFlag|SyncPredFlag);
Yap_InitCPred("$module_number", 2, p_module_number, SafePredFlag);
Yap_InitCPredBack("$all_current_modules", 1, 1, init_current_module, cont_current_module, Yap_InitCPredBack("$all_current_modules", 1, 1, init_current_module, cont_current_module,
SafePredFlag|SyncPredFlag); SafePredFlag|SyncPredFlag);
} }
@ -148,18 +152,18 @@ Yap_InitModulesC(void)
void void
Yap_InitModules(void) Yap_InitModules(void)
{ {
ModuleName[PROLOG_MODULE] = ModuleName[0] =
MkAtomTerm(Yap_LookupAtom("prolog")); TermProlog;
ModuleName[USER_MODULE] = ModuleName[1] =
MkAtomTerm(Yap_LookupAtom("user")); USER_MODULE;
ModuleName[IDB_MODULE] = ModuleName[2] =
MkAtomTerm(Yap_LookupAtom("idb")); IDB_MODULE;
ModuleName[ATTRIBUTES_MODULE] = ModuleName[3] =
MkAtomTerm(Yap_LookupAtom("attributes")); ATTRIBUTES_MODULE;
ModuleName[CHARSIO_MODULE] = ModuleName[4] =
MkAtomTerm(Yap_LookupAtom("charsio")); CHARSIO_MODULE;
ModuleName[TERMS_MODULE] = ModuleName[5] =
MkAtomTerm(Yap_LookupAtom("terms")); TERMS_MODULE;
NoOfModules = 6; NoOfModules = 6;
CurrentModule = 0; CurrentModule = PROLOG_MODULE;
} }

View File

@ -302,13 +302,13 @@ showprofres(int tipo) {
if (calls) { if (calls) {
if (myp->ArityOfPE) { if (myp->ArityOfPE) {
printf("%s:%s/%d -> %uld\n", printf("%s:%s/%d -> %uld\n",
RepAtom(AtomOfTerm(ModuleName[myp->ModuleOfPred]))->StrOfAE, RepAtom(AtomOfTerm(myp->ModuleOfPred))->StrOfAE,
RepAtom(NameOfFunctor(myp->FunctorOfPred))->StrOfAE, RepAtom(NameOfFunctor(myp->FunctorOfPred))->StrOfAE,
myp->ArityOfPE, myp->ArityOfPE,
calls); calls);
} else { } else {
printf("%s:%s -> %uld\n", printf("%s:%s -> %uld\n",
RepAtom(AtomOfTerm(ModuleName[myp->ModuleOfPred]))->StrOfAE, RepAtom(AtomOfTerm(myp->ModuleOfPred))->StrOfAE,
RepAtom((Atom)(myp->FunctorOfPred))->StrOfAE, RepAtom((Atom)(myp->FunctorOfPred))->StrOfAE,
calls); calls);
} }
@ -1742,7 +1742,7 @@ cont_current_predicate(void)
EXTRA_CBACK_ARG(3,1) = (CELL)MkIntegerTerm((Int)(pp->NextPredOfModule)); EXTRA_CBACK_ARG(3,1) = (CELL)MkIntegerTerm((Int)(pp->NextPredOfModule));
if (pp->FunctorOfPred == FunctorModule) if (pp->FunctorOfPred == FunctorModule)
return(FALSE); return(FALSE);
if (pp->ModuleOfPred != 2) { if (pp->ModuleOfPred != IDB_MODULE) {
Arity = pp->ArityOfPE; Arity = pp->ArityOfPE;
if (Arity) if (Arity)
name = MkAtomTerm(NameOfFunctor(pp->FunctorOfPred)); name = MkAtomTerm(NameOfFunctor(pp->FunctorOfPred));
@ -1771,7 +1771,7 @@ init_current_predicate(void)
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
if (IsVarTerm(t1) || !IsAtomTerm(t1)) cut_fail(); if (IsVarTerm(t1) || !IsAtomTerm(t1)) cut_fail();
EXTRA_CBACK_ARG(3,1) = MkIntegerTerm((Int)ModulePred[Yap_LookupModule(t1)]); EXTRA_CBACK_ARG(3,1) = t1;
return (cont_current_predicate()); return (cont_current_predicate());
} }
@ -1779,7 +1779,7 @@ static Int
cont_current_predicate_for_atom(void) cont_current_predicate_for_atom(void)
{ {
Prop pf = (Prop)IntegerOfTerm(EXTRA_CBACK_ARG(3,1)); Prop pf = (Prop)IntegerOfTerm(EXTRA_CBACK_ARG(3,1));
SMALLUNSGN mod = Yap_LookupModule(Deref(ARG2)); Term mod = Deref(ARG2);
while (pf != NIL) { while (pf != NIL) {
FunctorEntry *pp = RepFunctorProp(pf); FunctorEntry *pp = RepFunctorProp(pf);
@ -1993,15 +1993,11 @@ p_flags(void)
PredEntry *pe; PredEntry *pe;
Int newFl; Int newFl;
Term t1 = Deref(ARG1); Term t1 = Deref(ARG1);
Term t2 = Deref(ARG2); Term mod = Deref(ARG2);
int mod;
if (IsVarTerm(t1)) if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE);
if (!IsAtomTerm(t2)) {
return(FALSE); return(FALSE);
} }
mod = Yap_LookupModule(t2);
if (IsVarTerm(t1)) if (IsVarTerm(t1))
return (FALSE); return (FALSE);
if (IsAtomTerm(t1)) { if (IsAtomTerm(t1)) {

View File

@ -166,7 +166,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
} }
switch (port) { switch (port) {
case enter_pred: case enter_pred:
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE; mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE;
arity = pred->ArityOfPE; arity = pred->ArityOfPE;
if (arity == 0) if (arity == 0)
s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE;
@ -189,7 +189,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
if (pred == NULL) { if (pred == NULL) {
send_tracer_message("RETRY TABLE: ", NULL, 0, NULL, args); send_tracer_message("RETRY TABLE: ", NULL, 0, NULL, args);
} else { } else {
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE; mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE;
arity = pred->ArityOfPE; arity = pred->ArityOfPE;
if (arity == 0) if (arity == 0)
s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE;
@ -206,7 +206,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
if (pred == NULL) { if (pred == NULL) {
send_tracer_message("RETRY TABLE: ", NULL, 0, NULL, args); send_tracer_message("RETRY TABLE: ", NULL, 0, NULL, args);
} else { } else {
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE; mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE;
arity = pred->ArityOfPE; arity = pred->ArityOfPE;
if (arity == 0) if (arity == 0)
s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE;
@ -220,9 +220,9 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
case retry_pred: case retry_pred:
send_tracer_message("FAIL ", NULL, 0, NULL, args); send_tracer_message("FAIL ", NULL, 0, NULL, args);
if (pred != NULL) { if (pred != NULL) {
mname = RepAtom(AtomOfTerm(Yap_Module_Name((CODEADDR)pred)))->StrOfAE; mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE;
arity = pred->ArityOfPE; arity = pred->ArityOfPE;
if (pred->ModuleOfPred == 2) { if (pred->ModuleOfPred == IDB_MODULE) {
s = "recorded"; s = "recorded";
arity = 3; arity = 3;
} else if (arity == 0) { } else if (arity == 0) {

View File

@ -10,7 +10,7 @@
* File: Heap.h * * File: Heap.h *
* mods: * * mods: *
* comments: Heap Init Structure * * comments: Heap Init Structure *
* version: $Id: Heap.h,v 1.56 2004-02-11 13:59:52 vsc Exp $ * * version: $Id: Heap.h,v 1.57 2004-02-12 12:37:11 vsc Exp $ *
*************************************************************************/ *************************************************************************/
/* information that can be stored in Code Space */ /* information that can be stored in Code Space */
@ -67,7 +67,7 @@ typedef struct thandle {
UInt ssize; UInt ssize;
UInt tsize; UInt tsize;
Term tdetach; Term tdetach;
SMALLUNSGN cmod; Term cmod;
struct DB_TERM *tgoal; struct DB_TERM *tgoal;
int id; int id;
int ret; int ret;
@ -326,7 +326,12 @@ typedef struct various_codes {
term_dollar_u, term_dollar_u,
#endif #endif
term_prolog, term_prolog,
term_refound_var; term_refound_var,
user_module,
idb_module,
attributes_module,
charsio_module,
terms_module;
void *last_wtime; void *last_wtime;
struct pred_entry *pred_goal_expansion; struct pred_entry *pred_goal_expansion;
struct pred_entry *pred_meta_call; struct pred_entry *pred_meta_call;
@ -572,6 +577,12 @@ struct various_codes *heap_regs;
#define TermDollarU heap_regs->term_dollar_u #define TermDollarU heap_regs->term_dollar_u
#define TermProlog heap_regs->term_prolog #define TermProlog heap_regs->term_prolog
#define TermReFoundVar heap_regs->term_refound_var #define TermReFoundVar heap_regs->term_refound_var
#define PROLOG_MODULE 0
#define USER_MODULE heap_regs->user_module
#define IDB_MODULE heap_regs->idb_module
#define ATTRIBUTES_MODULE heap_regs->attributes_module
#define CHARSIO_MODULE heap_regs->charsio_module
#define TERMS_MODULE heap_regs->terms_module
#define PredGoalExpansion heap_regs->pred_goal_expansion #define PredGoalExpansion heap_regs->pred_goal_expansion
#define PredMetaCall heap_regs->pred_meta_call #define PredMetaCall heap_regs->pred_meta_call
#define PredDollarCatch heap_regs->pred_dollar_catch #define PredDollarCatch heap_regs->pred_dollar_catch
@ -716,13 +727,13 @@ Yap_PreAllocCodeSpace(void)
#if THREADS #if THREADS
Prop STD_PROTO(Yap_NewThreadPred, (PredEntry *)); Prop STD_PROTO(Yap_NewThreadPred, (PredEntry *));
Prop STD_PROTO(Yap_NewPredPropByFunctor, (Functor, SMALLUNSGN)); Prop STD_PROTO(Yap_NewPredPropByFunctor, (Functor, Term));
EXTERN inline PredEntry * EXTERN inline PredEntry *
Yap_GetThreadPred(PredEntry *ap) Yap_GetThreadPred(PredEntry *ap)
{ {
Functor f = ap->FunctorOfPred; Functor f = ap->FunctorOfPred;
SMALLUNSGN mod = ap->ModuleOfPred; Term mod = ap->ModuleOfPred;
Prop p0 = AbsPredProp(heap_regs->thread_handle[worker_id].local_preds); Prop p0 = AbsPredProp(heap_regs->thread_handle[worker_id].local_preds);
while(p0) { while(p0) {

View File

@ -10,7 +10,7 @@
* File: Regs.h * * File: Regs.h *
* mods: * * mods: *
* comments: YAP abstract machine registers * * comments: YAP abstract machine registers *
* version: $Id: Regs.h,v 1.25 2004-02-11 13:33:19 vsc Exp $ * * version: $Id: Regs.h,v 1.26 2004-02-12 12:37:11 vsc Exp $ *
*************************************************************************/ *************************************************************************/
@ -100,7 +100,7 @@ typedef struct
Term TermNil_; /* 20 */ Term TermNil_; /* 20 */
#endif #endif
#endif #endif
SMALLUNSGN CurrentModule_; Term CurrentModule_;
#if defined(SBA) || defined(TABLING) #if defined(SBA) || defined(TABLING)
CELL *H_FZ_; CELL *H_FZ_;
choiceptr B_FZ_; choiceptr B_FZ_;

View File

@ -10,7 +10,7 @@
* File: Yap.proto * * File: Yap.proto *
* mods: * * mods: *
* comments: Function declarations for YAP * * comments: Function declarations for YAP *
* version: $Id: Yapproto.h,v 1.45 2004-02-11 01:20:56 vsc Exp $ * * version: $Id: Yapproto.h,v 1.46 2004-02-12 12:37:12 vsc Exp $ *
*************************************************************************/ *************************************************************************/
/* prototype file for Yap */ /* prototype file for Yap */
@ -29,10 +29,10 @@ Term STD_PROTO(Yap_GetValue,(Atom));
Atom STD_PROTO(Yap_LookupAtom,(char *)); Atom STD_PROTO(Yap_LookupAtom,(char *));
Atom STD_PROTO(Yap_FullLookupAtom,(char *)); Atom STD_PROTO(Yap_FullLookupAtom,(char *));
void STD_PROTO(Yap_LookupAtomWithAddress,(char *,AtomEntry *)); void STD_PROTO(Yap_LookupAtomWithAddress,(char *,AtomEntry *));
Prop STD_PROTO(Yap_NewPredPropByFunctor,(struct FunctorEntryStruct *, SMALLUNSGN)); Prop STD_PROTO(Yap_NewPredPropByFunctor,(struct FunctorEntryStruct *, Term));
Prop STD_PROTO(Yap_NewPredPropByAtom,(struct AtomEntryStruct *, SMALLUNSGN)); Prop STD_PROTO(Yap_NewPredPropByAtom,(struct AtomEntryStruct *, Term));
Prop STD_PROTO(Yap_PredPropByFunctorNonThreadLocal,(struct FunctorEntryStruct *, SMALLUNSGN)); Prop STD_PROTO(Yap_PredPropByFunctorNonThreadLocal,(struct FunctorEntryStruct *, Term));
Prop STD_PROTO(Yap_PredPropByAtomNonThreadLocal,(struct AtomEntryStruct *, SMALLUNSGN)); Prop STD_PROTO(Yap_PredPropByAtomNonThreadLocal,(struct AtomEntryStruct *, Term));
Functor STD_PROTO(Yap_UnlockedMkFunctor,(AtomEntry *,unsigned int)); Functor STD_PROTO(Yap_UnlockedMkFunctor,(AtomEntry *,unsigned int));
Functor STD_PROTO(Yap_MkFunctor,(Atom,unsigned int)); Functor STD_PROTO(Yap_MkFunctor,(Atom,unsigned int));
void STD_PROTO(Yap_MkFunctorWithAddress,(Atom,unsigned int,FunctorEntry *)); void STD_PROTO(Yap_MkFunctorWithAddress,(Atom,unsigned int,FunctorEntry *));
@ -55,11 +55,11 @@ Term STD_PROTO(MkSFTerm,(Functor,int,Term *,Term));
CELL STD_PROTO(*ArgsOfSFTerm,(Term)); CELL STD_PROTO(*ArgsOfSFTerm,(Term));
#endif #endif
Prop STD_PROTO(Yap_GetPredPropByAtom,(Atom, SMALLUNSGN)); Prop STD_PROTO(Yap_GetPredPropByAtom,(Atom, Term));
Prop STD_PROTO(Yap_GetPredPropByFunc,(Functor, SMALLUNSGN)); Prop STD_PROTO(Yap_GetPredPropByFunc,(Functor, Term));
Prop STD_PROTO(Yap_GetPredPropByAtomInThisModule,(Atom, SMALLUNSGN)); Prop STD_PROTO(Yap_GetPredPropByAtomInThisModule,(Atom, Term));
Prop STD_PROTO(Yap_GetPredPropByFuncInThisModule,(Functor, SMALLUNSGN)); Prop STD_PROTO(Yap_GetPredPropByFuncInThisModule,(Functor, Term));
Prop STD_PROTO(Yap_GetPredPropHavingLock,(Atom,unsigned int,SMALLUNSGN)); Prop STD_PROTO(Yap_GetPredPropHavingLock,(Atom,unsigned int, Term));
Prop STD_PROTO(Yap_GetExpProp,(Atom,unsigned int)); Prop STD_PROTO(Yap_GetExpProp,(Atom,unsigned int));
Prop STD_PROTO(Yap_GetExpPropHavingLock,(AtomEntry *,unsigned int)); Prop STD_PROTO(Yap_GetExpPropHavingLock,(AtomEntry *,unsigned int));
@ -107,7 +107,7 @@ Int STD_PROTO(YAP_Execute,(struct pred_entry *, CPredicate));
/* cdmgr.c */ /* cdmgr.c */
Term STD_PROTO(Yap_all_calls,(void)); Term STD_PROTO(Yap_all_calls,(void));
Atom STD_PROTO(Yap_ConsultingFile,(void)); Atom STD_PROTO(Yap_ConsultingFile,(void));
Int STD_PROTO(Yap_PredForCode,(yamop *, Atom *, UInt *, SMALLUNSGN *)); Int STD_PROTO(Yap_PredForCode,(yamop *, Atom *, UInt *, Term *));
void STD_PROTO(Yap_InitCdMgr,(void)); void STD_PROTO(Yap_InitCdMgr,(void));
#if EMACS #if EMACS
int STD_PROTO(where_new_clause, (Prop, int)); int STD_PROTO(where_new_clause, (Prop, int));
@ -148,11 +148,11 @@ yamop *STD_PROTO(Yap_Error,(yap_error_number,Term,char *msg, ...));
void STD_PROTO(Yap_InitEval,(void)); void STD_PROTO(Yap_InitEval,(void));
/* exec.c */ /* exec.c */
Term STD_PROTO(Yap_ExecuteCallMetaCall,(SMALLUNSGN mod)); Term STD_PROTO(Yap_ExecuteCallMetaCall,(Term));
void STD_PROTO(Yap_InitExecFs,(void)); void STD_PROTO(Yap_InitExecFs,(void));
Int STD_PROTO(Yap_JumpToEnv,(Term)); Int STD_PROTO(Yap_JumpToEnv,(Term));
int STD_PROTO(Yap_RunTopGoal,(Term)); int STD_PROTO(Yap_RunTopGoal,(Term));
Int STD_PROTO(Yap_execute_goal,(Term, int, SMALLUNSGN)); Int STD_PROTO(Yap_execute_goal,(Term, int, Term));
int STD_PROTO(Yap_exec_absmi,(int)); int STD_PROTO(Yap_exec_absmi,(int));
void STD_PROTO(Yap_trust_last,(void)); void STD_PROTO(Yap_trust_last,(void));
@ -214,8 +214,9 @@ Term STD_PROTO(Yap_ReadTimedVar,(Term));
Term STD_PROTO(Yap_UpdateTimedVar,(Term, Term)); Term STD_PROTO(Yap_UpdateTimedVar,(Term, Term));
/* modules.c */ /* modules.c */
SMALLUNSGN STD_PROTO(Yap_LookupModule,(Term)); Term STD_PROTO(Yap_Module_Name, (struct pred_entry *));
Term STD_PROTO(Yap_Module_Name, (CODEADDR)); struct pred_entry *STD_PROTO(Yap_ModulePred, (Term));
void STD_PROTO(Yap_NewModulePred, (Term, struct pred_entry *));
void STD_PROTO(Yap_InitModules, (void)); void STD_PROTO(Yap_InitModules, (void));
void STD_PROTO(Yap_InitModulesC, (void)); void STD_PROTO(Yap_InitModulesC, (void));

View File

@ -386,7 +386,7 @@ typedef struct yami {
union { union {
struct yami *l; struct yami *l;
struct pred_entry *p; struct pred_entry *p;
SMALLUNSGN m_num; Term mod;
} sla_u; } sla_u;
struct pred_entry *p0; struct pred_entry *p0;
CELL next; CELL next;

View File

@ -169,11 +169,11 @@ void STD_PROTO(Yap_InitComma,(void));
/* cdmgr.c */ /* cdmgr.c */
void STD_PROTO(Yap_RemoveLogUpdIndex,(LogUpdIndex *)); void STD_PROTO(Yap_RemoveLogUpdIndex,(LogUpdIndex *));
void STD_PROTO(Yap_IPred,(PredEntry *)); void STD_PROTO(Yap_IPred,(PredEntry *));
void STD_PROTO(Yap_addclause,(Term,yamop *,int,int)); void STD_PROTO(Yap_addclause,(Term,yamop *,int,Term));
void STD_PROTO(Yap_add_logupd_clause,(PredEntry *,LogUpdClause *,int)); void STD_PROTO(Yap_add_logupd_clause,(PredEntry *,LogUpdClause *,int));
void STD_PROTO(Yap_kill_iblock,(ClauseUnion *,ClauseUnion *,PredEntry *)); void STD_PROTO(Yap_kill_iblock,(ClauseUnion *,ClauseUnion *,PredEntry *));
void STD_PROTO(Yap_cleanup_dangling_indices,(yamop *,yamop *,yamop *,yamop *)); void STD_PROTO(Yap_cleanup_dangling_indices,(yamop *,yamop *,yamop *,yamop *));
void STD_PROTO(Yap_EraseStaticClause,(StaticClause *, SMALLUNSGN)); void STD_PROTO(Yap_EraseStaticClause,(StaticClause *, Term));
ClauseUnion *STD_PROTO(Yap_find_owner_index,(yamop *, PredEntry *)); ClauseUnion *STD_PROTO(Yap_find_owner_index,(yamop *, PredEntry *));
/* dbase.c */ /* dbase.c */

View File

@ -256,7 +256,7 @@ void STD_PROTO(Yap_emit_3ops,(compiler_vm_op,CELL,CELL,CELL, struct intermediate
void STD_PROTO(Yap_emit_4ops,(compiler_vm_op,CELL,CELL,CELL,CELL, struct intermediates *)); void STD_PROTO(Yap_emit_4ops,(compiler_vm_op,CELL,CELL,CELL,CELL, struct intermediates *));
CELL *STD_PROTO(Yap_emit_extra_size,(compiler_vm_op,CELL,int, struct intermediates *)); CELL *STD_PROTO(Yap_emit_extra_size,(compiler_vm_op,CELL,int, struct intermediates *));
char *STD_PROTO(Yap_AllocCMem,(int, struct intermediates *)); char *STD_PROTO(Yap_AllocCMem,(int, struct intermediates *));
int STD_PROTO(Yap_is_a_test_pred,(Term, SMALLUNSGN)); int STD_PROTO(Yap_is_a_test_pred,(Term, Term));
void STD_PROTO(Yap_bip_name,(Int, char *)); void STD_PROTO(Yap_bip_name,(Int, char *));
#ifdef DEBUG #ifdef DEBUG
void STD_PROTO(Yap_ShowCode,(struct intermediates *)); void STD_PROTO(Yap_ShowCode,(struct intermediates *));

View File

@ -305,6 +305,11 @@ restore_codes(void)
#endif #endif
heap_regs->term_prolog = AtomTermAdjust(heap_regs->term_prolog); heap_regs->term_prolog = AtomTermAdjust(heap_regs->term_prolog);
heap_regs->term_refound_var = AtomTermAdjust(heap_regs->term_refound_var); heap_regs->term_refound_var = AtomTermAdjust(heap_regs->term_refound_var);
heap_regs->user_module = AtomTermAdjust(heap_regs->user_module);
heap_regs->idb_module = AtomTermAdjust(heap_regs->idb_module);
heap_regs->attributes_module = AtomTermAdjust(heap_regs->attributes_module);
heap_regs->charsio_module = AtomTermAdjust(heap_regs->charsio_module);
heap_regs->terms_module = AtomTermAdjust(heap_regs->terms_module);
if (heap_regs->dyn_array_list != NULL) { if (heap_regs->dyn_array_list != NULL) {
heap_regs->dyn_array_list = heap_regs->dyn_array_list =
(struct array_entry *)AddrAdjust((ADDR)heap_regs->dyn_array_list); (struct array_entry *)AddrAdjust((ADDR)heap_regs->dyn_array_list);
@ -1516,8 +1521,8 @@ CleanCode(PredEntry *pp)
pp->FunctorOfPred = FuncAdjust(pp->FunctorOfPred); pp->FunctorOfPred = FuncAdjust(pp->FunctorOfPred);
else else
pp->FunctorOfPred = (Functor)AtomAdjust((Atom)(pp->FunctorOfPred)); pp->FunctorOfPred = (Functor)AtomAdjust((Atom)(pp->FunctorOfPred));
if (pp->ModuleOfPred != 2) { if (pp->ModuleOfPred != IDB_MODULE) {
if (pp->src.OwnerFile && pp->ModuleOfPred != 2) if (pp->src.OwnerFile && pp->ModuleOfPred != IDB_MODULE)
pp->src.OwnerFile = AtomAdjust(pp->src.OwnerFile); pp->src.OwnerFile = AtomAdjust(pp->src.OwnerFile);
} }
if (!(pp->PredFlags & NumberDBPredFlag)) { if (!(pp->PredFlags & NumberDBPredFlag)) {

View File

@ -151,15 +151,12 @@ int start_yapor(void) {
static static
int p_sequential(void) { int p_sequential(void) {
Term t, tmod; Term t, mod;
SMALLUNSGN mod;
PredEntry *pe; PredEntry *pe;
tmod = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return(FALSE); return(FALSE);
} else {
mod = Yap_LookupModule(tmod);
} }
t = Deref(ARG1); t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -447,17 +444,14 @@ void answer_to_stdout(char *answer) {
#ifdef TABLING #ifdef TABLING
static static
int p_table(void) { int p_table(void) {
Term t, tmod; Term t, mod;
SMALLUNSGN mod;
PredEntry *pe; PredEntry *pe;
tab_ent_ptr te; tab_ent_ptr te;
sg_node_ptr sg_node; sg_node_ptr sg_node;
tmod = Deref(ARG2); tmod = Deref(ARG2);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE); return (FALSE);
} else {
mod = Yap_LookupModule(tmod);
} }
t = Deref(ARG1); t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -479,18 +473,15 @@ int p_table(void) {
static static
int p_abolish_trie(void) { int p_abolish_trie(void) {
Term t, tmod; Term t, mod;
SMALLUNSGN mod;
tab_ent_ptr tab_ent; tab_ent_ptr tab_ent;
sg_hash_ptr hash; sg_hash_ptr hash;
sg_node_ptr sg_node; sg_node_ptr sg_node;
UInt arity; UInt arity;
tmod = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE); return (FALSE);
} else {
mod = Yap_LookupModule(tmod);
} }
t = Deref(ARG1); t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {
@ -518,17 +509,14 @@ int p_abolish_trie(void) {
static static
int p_show_trie(void) { int p_show_trie(void) {
Term t1, t2, tmod; Term t1, t2, mod;
SMALLUNSGN mod;
PredEntry *pe; PredEntry *pe;
Atom at; Atom at;
UInt arity; UInt arity;
tmod = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE); return (FALSE);
} else {
mod = Yap_LookupModule(tmod);
} }
t1 = Deref(ARG1); t1 = Deref(ARG1);
if (IsAtomTerm(t1)) { if (IsAtomTerm(t1)) {
@ -564,17 +552,14 @@ int p_show_trie(void) {
static static
int p_resume_trie(void) { int p_resume_trie(void) {
Term t, tmod; Term t, mod;
SMALLUNSGN mod;
PredEntry *pe; PredEntry *pe;
Atom at; Atom at;
int arity; int arity;
tmod = Deref(ARG2); mod = Deref(ARG2);
if (IsVarTerm(tmod) || !IsAtomTerm(tmod)) { if (IsVarTerm(mod) || !IsAtomTerm(mod)) {
return (FALSE); return (FALSE);
} else {
mod = Yap_LookupModule(tmod);
} }
t = Deref(ARG1); t = Deref(ARG1);
if (IsAtomTerm(t)) { if (IsAtomTerm(t)) {

View File

@ -308,7 +308,7 @@ extern X_API void PROTO(YAP_RecoverSlots,(int));
extern X_API void PROTO(YAP_Throw,(YAP_Term)); extern X_API void PROTO(YAP_Throw,(YAP_Term));
/* int YAP_LookupModule() */ /* int YAP_LookupModule() */
extern X_API int PROTO(YAP_LookupModule,(YAP_Term)); #define YAP_LookupModule(T) (T)
/* int YAP_ModuleName() */ /* int YAP_ModuleName() */
extern X_API YAP_Term PROTO(YAP_ModuleName,(int)); extern X_API YAP_Term PROTO(YAP_ModuleName,(int));

View File

@ -64,7 +64,7 @@ Inline(IsFunctorProperty, PropFlags, int, flags, (flags == FunctorProperty) )
typedef struct { typedef struct {
Prop NextOfPE; /* used to chain properties */ Prop NextOfPE; /* used to chain properties */
PropFlags KindOfPE; /* kind of property */ PropFlags KindOfPE; /* kind of property */
SMALLUNSGN IndexOfMod; /* indec in module table */ SMALLUNSGN IndexOfMod; /* index in module table */
} ModEntry; } ModEntry;
#if USE_OFFSETS_IN_PROPS #if USE_OFFSETS_IN_PROPS
@ -237,7 +237,7 @@ typedef struct pred_entry {
#ifdef TABLING #ifdef TABLING
tab_ent_ptr TableOfPred; tab_ent_ptr TableOfPred;
#endif /* TABLING */ #endif /* TABLING */
SMALLUNSGN ModuleOfPred; /* module for this definition */ Term ModuleOfPred; /* module for this definition */
/* This must be at an odd number of cells, otherwise it /* This must be at an odd number of cells, otherwise it
will not be aligned on RISC machines */ will not be aligned on RISC machines */
profile_data StatisticsForPred; /* enable profiling for predicate */ profile_data StatisticsForPred; /* enable profiling for predicate */
@ -342,7 +342,7 @@ typedef struct struct_dbentry {
#endif #endif
DBRef First; /* first DBase entry */ DBRef First; /* first DBase entry */
DBRef Last; /* last DBase entry */ DBRef Last; /* last DBase entry */
SMALLUNSGN ModuleOfDB; /* module for this definition */ Term ModuleOfDB; /* module for this definition */
DBRef F0,L0; /* everyone */ DBRef F0,L0; /* everyone */
} DBEntry; } DBEntry;
typedef DBEntry *DBProp; typedef DBEntry *DBProp;
@ -358,7 +358,7 @@ typedef struct {
#endif #endif
DBRef First; /* first DBase entry */ DBRef First; /* first DBase entry */
DBRef Last; /* last DBase entry */ DBRef Last; /* last DBase entry */
SMALLUNSGN ModuleOfDB; /* module for this definition */ Term ModuleOfDB; /* module for this definition */
Int NOfEntries; /* age counter */ Int NOfEntries; /* age counter */
DBRef Index; /* age counter */ DBRef Index; /* age counter */
} LogUpdDBEntry; } LogUpdDBEntry;
@ -400,7 +400,7 @@ typedef struct {
#if defined(YAPOR) || defined(THREADS) #if defined(YAPOR) || defined(THREADS)
rwlock_t BBRWLock; /* a read-write lock to protect the entry */ rwlock_t BBRWLock; /* a read-write lock to protect the entry */
#endif #endif
SMALLUNSGN ModuleOfBB; /* module for this definition */ Term ModuleOfBB; /* module for this definition */
} BlackBoardEntry; } BlackBoardEntry;
typedef BlackBoardEntry *BBProp; typedef BlackBoardEntry *BBProp;
@ -509,7 +509,7 @@ EXTERN inline PredEntry *STD_PROTO(Yap_GetThreadPred, (PredEntry *));
#endif #endif
EXTERN inline Prop EXTERN inline Prop
PredPropByFunc(Functor f, SMALLUNSGN cur_mod) PredPropByFunc(Functor f, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;
@ -537,7 +537,7 @@ PredPropByFunc(Functor f, SMALLUNSGN cur_mod)
} }
EXTERN inline Prop EXTERN inline Prop
PredPropByAtom(Atom at, SMALLUNSGN cur_mod) PredPropByAtom(Atom at, Term cur_mod)
/* get predicate entry for ap/arity; create it if neccessary. */ /* get predicate entry for ap/arity; create it if neccessary. */
{ {
Prop p0; Prop p0;

View File

@ -85,14 +85,12 @@ do_not_compile_expressions :- set_value('$c_arith',[]).
'$do_c_built_metacall'(G1, Mod, call(Mod:G1)) :- '$do_c_built_metacall'(G1, Mod, call(Mod:G1)) :-
var(G1), var(Mod), !. var(G1), var(Mod), !.
'$do_c_built_metacall'(G1, Mod, '$execute_in_mod'(G1,MNum)) :- '$do_c_built_metacall'(G1, Mod, '$execute_in_mod'(G1,Mod)) :-
var(G1), atom(Mod), !, var(G1), atom(Mod), !.
'$module_number'(Mod,MNum).
'$do_c_built_metacall'(Mod:G1, _, call(Mod:G1)) :- !, '$do_c_built_metacall'(Mod:G1, _, call(Mod:G1)) :- !,
'$do_c_built_metacall'(G1, Mod, OUT). '$do_c_built_metacall'(G1, Mod, OUT).
'$do_c_built_metacall'(G1, Mod, '$execute_in_mod'(G1,MNum)) :- '$do_c_built_metacall'(G1, Mod, '$execute_in_mod'(G1,Mod)) :-
atom(Mod), !, atom(Mod), !.
'$module_number'(Mod,MNum).
'$do_c_built_metacall'(G1, Mod, call(Mod:G1)). '$do_c_built_metacall'(G1, Mod, call(Mod:G1)).

View File

@ -83,7 +83,6 @@
'$undefp'([Module1|Continuation]). '$undefp'([Module1|Continuation]).
'$execute_continuation'(Continuation, Mod) :- '$execute_continuation'(Continuation, Mod) :-
% do not do meta-expansion nor any fancy stuff. % do not do meta-expansion nor any fancy stuff.
'$module_number'(Mod,_),
'$execute0'(Continuation, Mod). '$execute0'(Continuation, Mod).

View File

@ -134,4 +134,3 @@ library_directory(D) :-
getenv('YAPSHAREDIR', D). getenv('YAPSHAREDIR', D).
:- get_value(system_library_directory,D), assert(library_directory(D)). :- get_value(system_library_directory,D), assert(library_directory(D)).