From 9b6bcdde16679f629d36c389eb7c79a6a4f63a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Wed, 4 Mar 2015 09:54:08 +0000 Subject: [PATCH] improve notion of standadard predicate --- C/exec.c | 2 +- C/init.c | 6 ++++-- C/qlyr.c | 10 +++++----- C/stdpreds.c | 2 +- H/qly.h | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/C/exec.c b/C/exec.c index ab51397b9..674e6a4cb 100755 --- a/C/exec.c +++ b/C/exec.c @@ -366,7 +366,7 @@ do_execute_n(Term t, Term mod, unsigned int n USES_REGS) CalculateStackGap( PASS_REGS1 ); } 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() && !LOCAL_InterruptsDisabled) { return EnterCreepMode(copy_execn_to_heap(f, pt, n, arity, CurrentModule PASS_REGS), mod PASS_REGS); diff --git a/C/init.c b/C/init.c index e1b755185..6fb511dbc 100755 --- a/C/init.c +++ b/C/init.c @@ -479,6 +479,8 @@ update_flags_from_prolog(UInt flags, PredEntry *pe) flags |= UDIPredFlag; if (pe->PredFlags & ModuleTransparentPredFlag) flags |= ModuleTransparentPredFlag; + if (pe->PredFlags & StandardPredFlag) + flags |= StandardPredFlag; return flags; } @@ -685,7 +687,7 @@ Yap_InitCmpPred(const char *Name, UInt Arity, CmpPredicate cmp_code, pred_flags_ } } else { Yap_ClauseSpace += sz; - cl->ClFlags = StaticMask; + cl->ClFlags = StaticMask|StandardPredFlag; cl->ClNext = NULL; cl->ClSize = sz; cl->usc.ClLine = Yap_source_line_no(); @@ -910,7 +912,7 @@ Yap_InitCPredBack_(const char *Name, UInt Arity, yamop *code = ((StaticClause *)NULL)->ClCode; UInt sz = (CELL)NEXTOP(NEXTOP(NEXTOP(NEXTOP(code,OtapFs),OtapFs),OtapFs),l); if (flags & UserCPredFlag) - pe->PredFlags = UserCPredFlag | BackCPredFlag| CompiledPredFlag | StandardPredFlag | flags; + pe->PredFlags = UserCPredFlag | BackCPredFlag| CompiledPredFlag | flags; else pe->PredFlags = CompiledPredFlag | StandardPredFlag | BackCPredFlag; diff --git a/C/qlyr.c b/C/qlyr.c index 4ad999d78..9035ffa42 100755 --- a/C/qlyr.c +++ b/C/qlyr.c @@ -58,7 +58,7 @@ qlyr_error[] = { "out of temporary space", "unknown YAAM opcode in saved space", "unknown data-base reference 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", "bad read" }; @@ -1015,10 +1015,10 @@ read_pred(IOSTREAM *stream, Term mod) { if (ap->PredFlags & IndexedPredFlag) { Yap_RemoveIndexation(ap); } - //if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE) - // printf(" %s/%ld\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE); - //else if (ap->ModuleOfPred != IDB_MODULE) - // printf(" %s/%ld\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE); + /* if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE) */ + /* printf(" %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags); */ + /* else if (ap->ModuleOfPred != IDB_MODULE) */ + /* printf(" %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags); */ fl1 = flags & ((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS); ap->PredFlags &= ~((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS); ap->PredFlags |= fl1; diff --git a/C/stdpreds.c b/C/stdpreds.c index f49331ba1..ac4d638a2 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -962,7 +962,7 @@ static Int cont_current_predicate(USES_REGS1) { if (!pp) cut_fail(); else - EXTRA_CBACK_ARG(4, 2) = MkAddressTerm(pp->NextPredOfModule); + EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(pp->NextPredOfModule); } if (pp->ModuleOfPred != IDB_MODULE) { f = pp->FunctorOfPred; diff --git a/H/qly.h b/H/qly.h index 273a757ad..271e65fab 100644 --- a/H/qly.h +++ b/H/qly.h @@ -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 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 RCHECK(F) if(!(F)) { QLYR_ERROR(MISMATCH); return; }