handle stack overflow within =..
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@466 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
97f7414cd2
commit
d2a6f16e4a
@ -21,6 +21,7 @@ static char SccsId[] = "%W% %G%";
|
||||
#include "absmi.h"
|
||||
#include "yapio.h"
|
||||
|
||||
|
||||
#define EARLY_RESET 1
|
||||
#if !defined(TABLING)
|
||||
#define EASY_SHUNTING 1
|
||||
|
18
C/stdpreds.c
18
C/stdpreds.c
@ -1152,12 +1152,20 @@ p_univ(void)
|
||||
}
|
||||
return (unify_constant(ARG1, MkAtomTerm(at)));
|
||||
}
|
||||
build_compound:
|
||||
/* build the term directly on the heap */
|
||||
Ar = H;
|
||||
H++;
|
||||
|
||||
while (!IsVarTerm(twork) && IsPairTerm(twork)) {
|
||||
*H++ = HeadOfTerm(twork);
|
||||
if (H > ASP - 1024) {
|
||||
/* restore space */
|
||||
H = Ar;
|
||||
gc(2, ENV, P);
|
||||
twork = TailOfTerm(Deref(ARG2));
|
||||
goto build_compound;
|
||||
}
|
||||
twork = TailOfTerm(twork);
|
||||
}
|
||||
if (IsVarTerm(twork)) {
|
||||
@ -1217,7 +1225,13 @@ p_univ(void)
|
||||
twork = ArrayToList(CellPtr(TR), argno - 1);
|
||||
} else
|
||||
#endif
|
||||
twork = ArrayToList(RepAppl(tin) + 1, arity);
|
||||
{
|
||||
if (H+arity*2 > ASP-1024) {
|
||||
gc(2, ENV, P);
|
||||
tin = Deref(ARG1);
|
||||
}
|
||||
twork = ArrayToList(RepAppl(tin) + 1, arity);
|
||||
}
|
||||
} else {
|
||||
/* We found a list */
|
||||
at = AtomDot;
|
||||
@ -2133,7 +2147,7 @@ InitCPreds(void)
|
||||
InitCPred("number_atom", 2, p_number_atom, SafePredFlag);
|
||||
InitCPred("number_codes", 2, p_number_codes, SafePredFlag);
|
||||
InitCPred("atom_concat", 2, p_atom_concat, SafePredFlag);
|
||||
InitCPred("=..", 2, p_univ, SafePredFlag);
|
||||
InitCPred("=..", 2, p_univ, 0);
|
||||
InitCPred("$statistics_trail_max", 1, p_statistics_trail_max, SafePredFlag|SyncPredFlag);
|
||||
InitCPred("$statistics_heap_max", 1, p_statistics_heap_max, SafePredFlag|SyncPredFlag);
|
||||
InitCPred("$statistics_global_max", 1, p_statistics_global_max, SafePredFlag|SyncPredFlag);
|
||||
|
@ -861,10 +861,10 @@ debugging :-
|
||||
'$action'(60,_,_,_,_,_) :- !, % <Depth
|
||||
'$new_deb_depth',
|
||||
fail.
|
||||
'$action'(94,_,_,G,M,_) :- !,
|
||||
'$print_deb_sterm'(G,M), fail.
|
||||
'$action'(94,_,_,G,_) :- !,
|
||||
'$print_deb_sterm'(G), fail.
|
||||
'$action'(0'a,_,_,_,_,_) :- !, abort. % a abort
|
||||
'$action'(0'd,_,_,_,_,_) :- !, break, % b break
|
||||
'$action'(0'b,_,_,_,_,_) :- !, break, % b break
|
||||
fail.
|
||||
'$action'(0'c,call,_,_,_,_) :- !, % c creep
|
||||
'$set_yap_flags'(10,1).
|
||||
@ -946,7 +946,7 @@ debugging :-
|
||||
'$get_sterm_list'(L), !,
|
||||
'$deb_get_sterm_in_g'(L,G,A),
|
||||
recorda('$debug_sub_skel',L,_),
|
||||
nl(user_error), write(user_error,A), nl(user_error), nl(user_error).
|
||||
'$format'(user_error,"~n~w~n~n",[A]).
|
||||
'$print_deb_sterm'(_) :- '$skipeol'(94).
|
||||
|
||||
'$get_sterm_list'(L) :-
|
||||
|
Reference in New Issue
Block a user