improve notion of standadard predicate

This commit is contained in:
Vítor Santos Costa 2015-03-04 09:54:08 +00:00
parent 5ea3fcd08f
commit 9b6bcdde16
5 changed files with 12 additions and 10 deletions

View File

@ -479,6 +479,8 @@ update_flags_from_prolog(UInt flags, PredEntry *pe)
flags |= UDIPredFlag; flags |= UDIPredFlag;
if (pe->PredFlags & ModuleTransparentPredFlag) if (pe->PredFlags & ModuleTransparentPredFlag)
flags |= ModuleTransparentPredFlag; flags |= ModuleTransparentPredFlag;
if (pe->PredFlags & StandardPredFlag)
flags |= StandardPredFlag;
return flags; return flags;
} }
@ -685,7 +687,7 @@ Yap_InitCmpPred(const char *Name, UInt Arity, CmpPredicate cmp_code, pred_flags_
} }
} else { } else {
Yap_ClauseSpace += sz; Yap_ClauseSpace += sz;
cl->ClFlags = StaticMask; cl->ClFlags = StaticMask|StandardPredFlag;
cl->ClNext = NULL; cl->ClNext = NULL;
cl->ClSize = sz; cl->ClSize = sz;
cl->usc.ClLine = Yap_source_line_no(); cl->usc.ClLine = Yap_source_line_no();
@ -910,7 +912,7 @@ Yap_InitCPredBack_(const char *Name, UInt Arity,
yamop *code = ((StaticClause *)NULL)->ClCode; yamop *code = ((StaticClause *)NULL)->ClCode;
UInt sz = (CELL)NEXTOP(NEXTOP(NEXTOP(NEXTOP(code,OtapFs),OtapFs),OtapFs),l); UInt sz = (CELL)NEXTOP(NEXTOP(NEXTOP(NEXTOP(code,OtapFs),OtapFs),OtapFs),l);
if (flags & UserCPredFlag) if (flags & UserCPredFlag)
pe->PredFlags = UserCPredFlag | BackCPredFlag| CompiledPredFlag | StandardPredFlag | flags; pe->PredFlags = UserCPredFlag | BackCPredFlag| CompiledPredFlag | flags;
else else
pe->PredFlags = CompiledPredFlag | StandardPredFlag | BackCPredFlag; pe->PredFlags = CompiledPredFlag | StandardPredFlag | BackCPredFlag;

View File

@ -1015,10 +1015,10 @@ read_pred(IOSTREAM *stream, Term mod) {
if (ap->PredFlags & IndexedPredFlag) { if (ap->PredFlags & IndexedPredFlag) {
Yap_RemoveIndexation(ap); Yap_RemoveIndexation(ap);
} }
//if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE) /* if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE) */
// printf(" %s/%ld\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE); /* printf(" %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags); */
//else if (ap->ModuleOfPred != IDB_MODULE) /* else if (ap->ModuleOfPred != IDB_MODULE) */
// printf(" %s/%ld\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE); /* printf(" %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags); */
fl1 = flags & ((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS); fl1 = flags & ((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
ap->PredFlags &= ~((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS); ap->PredFlags &= ~((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
ap->PredFlags |= fl1; ap->PredFlags |= fl1;

View File

@ -962,7 +962,7 @@ static Int cont_current_predicate(USES_REGS1) {
if (!pp) if (!pp)
cut_fail(); cut_fail();
else else
EXTRA_CBACK_ARG(4, 2) = MkAddressTerm(pp->NextPredOfModule); EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(pp->NextPredOfModule);
} }
if (pp->ModuleOfPred != IDB_MODULE) { if (pp->ModuleOfPred != IDB_MODULE) {
f = pp->FunctorOfPred; f = pp->FunctorOfPred;

View File

@ -104,7 +104,7 @@ typedef enum {
#define STATIC_PRED_FLAGS (SourcePredFlag|DynamicPredFlag|LogUpdatePredFlag|CompiledPredFlag|MultiFileFlag|TabledPredFlag|MegaClausePredFlag|CountPredFlag|ProfiledPredFlag|ThreadLocalPredFlag|AtomDBPredFlag|ModuleTransparentPredFlag|NumberDBPredFlag|MetaPredFlag|SyncPredFlag|BackCPredFlag) #define STATIC_PRED_FLAGS (SourcePredFlag|DynamicPredFlag|LogUpdatePredFlag|CompiledPredFlag|MultiFileFlag|TabledPredFlag|MegaClausePredFlag|CountPredFlag|ProfiledPredFlag|ThreadLocalPredFlag|AtomDBPredFlag|ModuleTransparentPredFlag|NumberDBPredFlag|MetaPredFlag|SyncPredFlag|BackCPredFlag)
#define EXTRA_PRED_FLAGS (QuasiQuotationPredFlag|NoTracePredFlag|NoSpyPredFlag) #define EXTRA_PRED_FLAGS (QuasiQuotationPredFlag|NoTracePredFlag|NoSpyPredFlag)
#define SYSTEM_PRED_FLAGS (BackCPredFlag|UserCPredFlag|CArgsPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag) #define SYSTEM_PRED_FLAGS (BackCPredFlag|UserCPredFlag|CArgsPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag|StandardPredFlag)
#define CHECK(F) { size_t r = (F); if (!r) return r; } #define CHECK(F) { size_t r = (F); if (!r) return r; }
#define RCHECK(F) if(!(F)) { QLYR_ERROR(MISMATCH); return; } #define RCHECK(F) if(!(F)) { QLYR_ERROR(MISMATCH); return; }