diff --git a/C/adtdefs.c b/C/adtdefs.c index 87ea9c6b4..064f02421 100755 --- a/C/adtdefs.c +++ b/C/adtdefs.c @@ -1296,6 +1296,10 @@ Atom Yap_LookupAtomWithLength(const char *atom, at = NameOfFunctor(pe->FunctorOfPred); } } + if (mods == PROLOG_MODULE || mods == USER_MODULE) + snprintf(LOCAL_FileNameBuf, YAP_FILENAME_MAX, "%s/" UInt_FORMAT, + RepAtom(at)->StrOfAE, arity); + else snprintf(LOCAL_FileNameBuf, YAP_FILENAME_MAX, "%s:%s/" UInt_FORMAT, mods, RepAtom(at)->StrOfAE, arity); return LOCAL_FileNameBuf; diff --git a/C/cdmgr.c b/C/cdmgr.c index 89534376d..d7cefa454 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -349,7 +349,7 @@ static void split_megaclause(PredEntry *ap) { mcl = ClauseCodeToMegaClause(ap->cs.p_code.FirstClause); if (mcl->ClFlags & ExoMask) { - Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, TermNil, + Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, Yap_PredicateIndicator(CurrentModule,ap), "while deleting clause from exo predicate %s/%d\n", RepAtom(NameOfFunctor(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE); @@ -1465,34 +1465,30 @@ static int not_was_reconsulted(PredEntry *p, Term t, int mode) { } static yamop *addcl_permission_error(const char *file, const char *function, - int lineno, AtomEntry *ap, Int Arity, + int lineno, PredEntry *ap, int in_use) { CACHE_REGS - Term culprit; - if (Arity == 0) - culprit = MkAtomTerm(AbsAtom(ap)); - else - culprit = Yap_MkNewApplTerm(Yap_MkFunctor(AbsAtom(ap), Arity), Arity); - return (in_use - ? (Arity == 0 + Term culprit = Yap_PredicateIndicator(CurrentModule, ap); + return in_use + ? (ap->ArityOfPE == 0 ? Yap_Error__(false, file, function, lineno, PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, culprit, "static predicate %s is in use", - ap->StrOfAE) + NameOfPred(ap)->StrOfAE) : Yap_Error__( false, file, function, lineno, PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, culprit, "static predicate %s/" Int_FORMAT " is in use", - ap->StrOfAE, Arity)) - : (Arity == 0 + NameOfPred(ap), ap->ArityOfPE)) + : (ap->ArityOfPE == 0 ? Yap_Error__(false, file, function, lineno, PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, culprit, "system predicate %s is in use", - ap->StrOfAE) + NameOfPred(ap)->StrOfAE) : Yap_Error__(false, file, function, lineno, PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, culprit, "system predicate %s/" Int_FORMAT, - ap->StrOfAE, Arity))); + NameOfPred(ap)->StrOfAE, ap->ArityOfPE)); } PredEntry *Yap_PredFromClause(Term t USES_REGS) { @@ -1752,7 +1748,7 @@ bool Yap_addclause(Term t, yamop *cp, Term tmode, Term mod, Term *t4ref) PELOCK(20, p); /* we are redefining a prolog module predicate */ if (Yap_constPred(p)) { - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), Arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, p, FALSE); UNLOCKPE(30, p); return false; @@ -2189,7 +2185,7 @@ static Int p_purge_clauses(USES_REGS1) { /* '$purge_clauses'(+Func) */ PELOCK(21, pred); if (pred->PredFlags & StandardPredFlag) { UNLOCKPE(33, pred); - Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, t, "assert/1"); + Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, Yap_PredicateIndicator(CurrentModule, pred), "assert/1"); return (FALSE); } purge_clauses(pred); @@ -2452,13 +2448,13 @@ static Int new_multifile(USES_REGS1) { } if (pe->PredFlags & (TabledPredFlag | ForeignPredFlags)) { UNLOCKPE(26, pe); - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, pe, FALSE); return false; } if (pe->cs.p_code.NOfClauses) { UNLOCKPE(26, pe); - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, pe, FALSE); return false; } @@ -2693,7 +2689,7 @@ static Int mk_dynamic(USES_REGS1) { /* '$make_dynamic'(+P) */ (UserCPredFlag | CArgsPredFlag | NumberDBPredFlag | AtomDBPredFlag | TestPredFlag | AsmPredFlag | CPredFlag | BinaryPredFlag)) { UNLOCKPE(30, pe); - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, pe, FALSE); return false; } @@ -2707,7 +2703,7 @@ static Int mk_dynamic(USES_REGS1) { /* '$make_dynamic'(+P) */ } if (pe->cs.p_code.NOfClauses != 0) { UNLOCKPE(26, pe); - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, pe, FALSE); return false; } @@ -2758,7 +2754,7 @@ static Int new_meta_pred(USES_REGS1) { } if (pe->cs.p_code.NOfClauses) { UNLOCKPE(26, pe); - addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, RepAtom(at), arity, + addcl_permission_error(__FILE__, __FUNCTION__, __LINE__, pe, FALSE); return false; } @@ -4106,7 +4102,7 @@ static Int | TabledPredFlag #endif /* TABLING */ )) { - Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, t, + Yap_Error(PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, Yap_PredicateIndicator(CurrentModule, ap), "dbload_get_space/4"); return FALSE; } diff --git a/os/alias.c b/os/alias.c index b03f86fd4..d3d72f31e 100644 --- a/os/alias.c +++ b/os/alias.c @@ -346,11 +346,12 @@ Yap_FindStreamForAlias (Atom al) while (aliasp < aliasp_max) { if (aliasp->name == al) { - return aliasp->alias_stream; + return aliasp->alias_stream > 0; } aliasp++; } - return true; + LOCAL_Error_TYPE = DOMAIN_ERROR_STREAM; + return false; } /* create a new alias arg for stream sno */ diff --git a/os/streams.c b/os/streams.c index dff198cbe..1173e66c6 100644 --- a/os/streams.c +++ b/os/streams.c @@ -783,6 +783,7 @@ static Int stream_property(USES_REGS1) { /* Init current_stream */ "current_stream/3"); if (i < 0) { UNLOCK(GLOBAL_Stream[i].streamlock); + Yap_ThrowError(LOCAL_Error_TYPE, t1, "bad stream descriptor"); return false; // error... } EXTRA_CBACK_ARG(2, 1) = MkIntTerm(i); diff --git a/packages/python/swig/prolog/yapi.yap b/packages/python/swig/prolog/yapi.yap index 1ad5649d1..baf97b55a 100644 --- a/packages/python/swig/prolog/yapi.yap +++ b/packages/python/swig/prolog/yapi.yap @@ -79,6 +79,7 @@ python_query( Caller, String, Bindings ) :- output(Caller, Bindings). output( Caller, Bindings ) :- +fail, Answer := {}, % start_low_level_trace, foldl(ground_dict(answer), Bindings, [], Ts), diff --git a/pl/messages.yap b/pl/messages.yap index d14f2524f..6d5418555 100644 --- a/pl/messages.yap +++ b/pl/messages.yap @@ -1045,7 +1045,9 @@ prolog:print_message(Severity, Msg) :- !. prolog:print_message(Level, _Msg) :- current_prolog_flag(verbose_load, false), - prolog_load_context(file, _FileName), + '$show_consult_level'(LC), + LC > 0, + Level \= error, Level \= warning, !. prolog:print_message(Level, _Msg) :-