From 3c3d0de2de570999fee7dfb918b4c36d95584d6d Mon Sep 17 00:00:00 2001 From: vsc Date: Mon, 14 Apr 2008 17:30:18 +0000 Subject: [PATCH] partial fix to predicate_property trouble (obs from Nicos). fix core dump when writing arrays without bignum support. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2217 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/write.c | 8 ++++++-- library/lineutils.yap | 1 + pl/preds.yap | 14 +++++++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/C/write.c b/C/write.c index 7b1ef8581..acd4c7f0e 100644 --- a/C/write.c +++ b/C/write.c @@ -475,8 +475,8 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb) case (CELL)FunctorLongInt: wrputn(LongIntOfTerm(t),wglb->writewch); return; -#ifdef USE_GMP case (CELL)FunctorBigInt: +#ifdef USE_GMP { MP_INT *big = Yap_BigIntOfTerm(t); char *s = (char *)TR; @@ -498,8 +498,12 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb) mpz_get_str(s, 10, big); wrputs(s,wglb->writewch); } - return; +#else + { + wrputs("0",wglb->writewch); + } #endif + return; } } Arity = ArityOfFunctor(functor); diff --git a/library/lineutils.yap b/library/lineutils.yap index ab47a9422..f0b5f9e1c 100644 --- a/library/lineutils.yap +++ b/library/lineutils.yap @@ -61,6 +61,7 @@ split(SplitCodes, [C|New], Set) --> split(_, [], []) --> []. glue([], _, []). +glue([A], _, A) :- !. glue([H|T], [B|_], Merged) :- append(H, [B|Rest], Merged), glue(T, [B], Rest). diff --git a/pl/preds.yap b/pl/preds.yap index 87a97674e..3fe576d9d 100644 --- a/pl/preds.yap +++ b/pl/preds.yap @@ -818,7 +818,16 @@ predicate_property(Pred,Prop) :- '$predicate_property'(Pred,Mod,Mod,Prop). '$predicate_property2'(Pred,Prop,Mod) :- recorded('$import','$import'(M,Mod,NPred,Pred,_,_),_), - '$predicate_property2'(NPred,Prop,M). + ( + Prop = imported_from(M) + ; + functor(Pred,P,A), + recorded('$module','$module'(_TFN,Mod,Publics),_), + lists:memberchk(N/A,Publics) + ; + '$predicate_property2'(NPred,Prop,M), + Prop \= exported + ). '$generate_all_preds_from_mod'(Pred, M, M) :- '$current_predicate'(M,Na,Ar), @@ -845,8 +854,6 @@ predicate_property(Pred,Prop) :- '$meta_predicate'(M,Na,Ar,P). '$predicate_property'(P,M,_,multifile) :- '$is_multifile'(P,M). -'$predicate_property'(P,Mod,M,imported_from(Mod)) :- - recorded('$import','$import'(Mod,M,_,P,_,_),_). '$predicate_property'(P,M,_,public) :- '$is_public'(P,M). '$predicate_property'(P,M,M,exported) :- @@ -854,6 +861,7 @@ predicate_property(Pred,Prop) :- recorded('$module','$module'(_TFN,M,Publics),_), lists:memberchk(N/A,Publics), !. '$predicate_property'(P,Mod,_,number_of_clauses(NCl)) :- + write(P:Mod),nl, '$number_of_clauses'(P,Mod,NCl).