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

@ -366,7 +366,7 @@ do_execute_n(Term t, Term mod, unsigned int n USES_REGS)
CalculateStackGap( PASS_REGS1 ); CalculateStackGap( PASS_REGS1 );
} }
t = copy_execn_to_heap(f, pt, n, arity, mod PASS_REGS); t = copy_execn_to_heap(f, pt, n, arity, mod PASS_REGS);
return CallMetaCall(t, mod PASS_REGS); return CallMetaCall(t, mod PASS_REGS);
} else if (Yap_has_a_signal() && } else if (Yap_has_a_signal() &&
!LOCAL_InterruptsDisabled) { !LOCAL_InterruptsDisabled) {
return EnterCreepMode(copy_execn_to_heap(f, pt, n, arity, CurrentModule PASS_REGS), mod PASS_REGS); return EnterCreepMode(copy_execn_to_heap(f, pt, n, arity, CurrentModule PASS_REGS), mod PASS_REGS);

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

@ -58,7 +58,7 @@ qlyr_error[] = { "out of temporary space",
"unknown YAAM opcode in saved space", "unknown YAAM opcode in saved space",
"unknown data-base reference in saved space", "unknown data-base reference in saved space",
"corrupted atom in saved space", "corrupted atom in saved space",
"formatting mismatch in saved space", "formatting mismatch in saved space",
"foreign predicate has different definition in saved space", "foreign predicate has different definition in saved space",
"bad read" }; "bad read" };
@ -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; }