This commit is contained in:
Vitor Santos Costa 2019-01-27 10:11:56 +00:00
parent 5ec9e31eb9
commit 13d764067f
5 changed files with 37 additions and 27 deletions

View File

@ -2109,7 +2109,9 @@ X_API void YAP_ClearExceptions(void) {
X_API int YAP_InitConsult(int mode, const char *fname, char **full, X_API int YAP_InitConsult(int mode, const char *fname, char **full,
int *osnop) { int *osnop) {
CACHE_REGS CACHE_REGS
int sno;
int sno;
int lvl = push_text_stack();
BACKUP_MACHINE_REGS(); BACKUP_MACHINE_REGS();
const char *fl = NULL; const char *fl = NULL;
if (mode == YAP_BOOT_MODE) { if (mode == YAP_BOOT_MODE) {
@ -2126,8 +2128,6 @@ X_API int YAP_InitConsult(int mode, const char *fname, char **full,
} }
__android_log_print( __android_log_print(
ANDROID_LOG_INFO, "YAPDroid", "done init_ consult %s ",fl); ANDROID_LOG_INFO, "YAPDroid", "done init_ consult %s ",fl);
int lvl = push_text_stack();
char *d = Malloc(strlen(fl) + 1); char *d = Malloc(strlen(fl) + 1);
strcpy(d, fl); strcpy(d, fl);
bool consulted = (mode == YAP_CONSULT_MODE); bool consulted = (mode == YAP_CONSULT_MODE);
@ -2136,9 +2136,9 @@ int lvl = push_text_stack();
LOCAL_encoding); LOCAL_encoding);
__android_log_print( __android_log_print(
ANDROID_LOG_INFO, "YAPDroid", "OpenStream got %d ",sno); ANDROID_LOG_INFO, "YAPDroid", "OpenStream got %d ",sno);
pop_text_stack(lvl);
if (sno < 0 || !Yap_ChDir(dirname((char *)d))) { if (sno < 0 || !Yap_ChDir(dirname((char *)d))) {
*full = NULL; *full = NULL;
pop_text_stack(lvl);
return -1; return -1;
} }
LOCAL_PrologMode = UserMode; LOCAL_PrologMode = UserMode;

View File

@ -439,7 +439,7 @@ int Yap_copy_complex_term(register CELL *pt0, register CELL *pt0_end,
(ptd0 >= HB && ptd0 < HR)) { (ptd0 >= HB && ptd0 < HR)) {
/* we have already found this cell */ /* we have already found this cell */
*ptf++ = (CELL)ptd0; *ptf++ = (CELL)ptd0;
} else } else
if (copy_att_vars && GlobalIsAttachedTerm((CELL)ptd0)) { if (copy_att_vars && GlobalIsAttachedTerm((CELL)ptd0)) {
/* if unbound, call the standard copy term routine */ /* if unbound, call the standard copy term routine */
struct cp_frame *bp; struct cp_frame *bp;
@ -458,16 +458,16 @@ int Yap_copy_complex_term(register CELL *pt0, register CELL *pt0_end,
goto trail_overflow; goto trail_overflow;
} }
} }
TrailedMaBind(ptd0, new);
ptf++; } else {
} else {
/* first time we met this term */ /* first time we met this term */
RESET_VARIABLE(ptf); RESET_VARIABLE(ptf);
if ((ADDR)TR > LOCAL_TrailTop - 16)
goto trail_overflow;
DO_TRAIL(ptd0, (CELL)ptf); DO_TRAIL(ptd0, (CELL)ptf);
*ptd0 = (CELL)ptf; *ptd0 = (CELL)ptf;
ptf++; ptf++;
if ((ADDR)TR > LOCAL_TrailTop - 16)
goto trail_overflow;
} }
} }

View File

@ -117,6 +117,8 @@ static wtype AtomIsSymbols(unsigned char *);
static void putAtom(Atom, int, struct write_globs *); static void putAtom(Atom, int, struct write_globs *);
static void writeTerm(Term, int, int, int, struct write_globs *, static void writeTerm(Term, int, int, int, struct write_globs *,
struct rewind_term *); struct rewind_term *);
static void writeTerm__(Term t, yhandle_t sl, int p, int depth, int rinfixarg,
struct write_globs *wglb, struct rewind_term *rwt);
static void write_list(Term t, int direction, int depth, static void write_list(Term t, int direction, int depth,
struct write_globs *wglb, struct rewind_term *rwt); struct write_globs *wglb, struct rewind_term *rwt);
@ -760,7 +762,7 @@ static void write_list__(Term t, yhandle_t sl, int direction, int depth,
if (!IsPairTerm(ti)) if (!IsPairTerm(ti))
break; break;
if (check_for_loops(ti,wglb)) return; if (check_for_loops(ti,wglb)) return;
wglb->sl = Yap_InitHandle(ti); sl = wglb->sl = Yap_InitHandle(ti);
ndirection = RepPair(ti) - RepPair(t); ndirection = RepPair(ti) - RepPair(t);
/* make sure we're not trapped in loops */ /* make sure we're not trapped in loops */
if (ndirection > 0) { if (ndirection > 0) {
@ -793,14 +795,14 @@ static void write_list__(Term t, yhandle_t sl, int direction, int depth,
/* we found an infinite loop */ /* we found an infinite loop */
/* keep going on the list */ /* keep going on the list */
wrputc(',', wglb->stream); wrputc(',', wglb->stream);
write_list(ti, direction, depth, wglb, &nrwt); write_list__(ti, sl, direction, depth, wglb, &nrwt);
} else if (ti != MkAtomTerm(AtomNil)) { } else if (ti != MkAtomTerm(AtomNil)) {
if (lastw == symbol || lastw == separator) { if (lastw == symbol || lastw == separator) {
wrputc(' ', wglb->stream); wrputc(' ', wglb->stream);
} }
wrputc('|', wglb->stream); wrputc('|', wglb->stream);
lastw = separator; lastw = separator;
writeTerm(ti, 999, depth, FALSE, wglb, &nrwt); writeTerm__(ti, sl, 999, depth, FALSE, wglb, &nrwt);
} }
} }

View File

@ -11,7 +11,8 @@
* [TOC] * [TOC]
* *
* @{ * @{
* \*/ *
*/
:- '$system_meta_predicates'([ :- '$system_meta_predicates'([
gated_call(0,0,?,0), gated_call(0,0,?,0),
@ -330,8 +331,8 @@ live :-
'$process_answer'(Vs, LGs, Bindings) :- '$process_answer'(Vs, LGs, Bindings) :-
'$purge_dontcares'(Vs,IVs), %'$purge_dontcares'(Vs,IVs),
'$sort'(IVs, NVs), '$sort'(Vs, NVs),
'$prep_answer_var_by_var'(NVs, LAnsw, LGs), '$prep_answer_var_by_var'(NVs, LAnsw, LGs),
'$name_vars_in_goals'(LAnsw, Vs, Bindings). '$name_vars_in_goals'(LAnsw, Vs, Bindings).

View File

@ -96,27 +96,25 @@ undefined_query(G0, M0, Cut) :-
% undef handler % undef handler
'$undefp'([M0|G0],MG) :- '$undefp'([M0|G0],MG) :-
% make sure we do not loop on undefined predicates % make sure we do not loop on undefined predicates
'$undef_setup'(Action,Debug,Current), '$undef_setup'(M0:G0, Action,Debug,Current, MGI),
('$get_undefined_predicates'(M0:G0, MG) ('$get_undefined_predicates'(Current, MGI, MG ) , MG)
-> ->
true true
; ;
'$undef_error'(M0:G0, MG) '$undef_error'(Current, M0:G0, MGI, MG)
), ,
'$undef_cleanup'(Action,Debug,Current). '$undef_cleanup'(Action,Debug,Current).
'$undef_error'(M0:G0, MG) :- '$undef_error'(_, M0:G0, _, MG) :-
'$pred_exists'(unknown_predicate_handler(_,_,_,_), user), '$pred_exists'(unknown_predicate_handler(_,_,_,_), user),
'$yap_strip_module'(M0:G0, EM0, GM0), '$yap_strip_module'(M0:G0, EM0, GM0),
user:unknown_predicate_handler(GM0,EM0,MG), user:unknown_predicate_handler(GM0,EM0,MG),
!. !.
'$handle_error'(Mod:Goal,_) :- '$handle_error'(error, Mod:Goal, I,_) :-
functor(Goal,Name,Arity), '$do_error'(existence_error(procedure,I), Mod:Goal).
'$do_error'(existence_error(procedure,Name/Arity), Mod:Goal). '$handle_error'(warning,Mod:Goal,I,_) :-
'$handle_error'(warning,Goal,Mod) :-
functor(Goal,Name,Arity),
'program_continuation'(PMod,PName,PAr), 'program_continuation'(PMod,PName,PAr),
print_message(warning,error(existence_error(procedure,Name/Arity), context(Mod:Goal,PMod:PName/PAr))), print_message(warning,error(existence_error(procedure,I), context(Mod:Goal,PMod:PName/PAr))),
fail. fail.
'$handle_error'(fail,_Goal,_Mod) :- '$handle_error'(fail,_Goal,_Mod) :-
fail. fail.
@ -126,6 +124,15 @@ undefined_query(G0, M0, Cut) :-
yap_flag( debug, Debug, false), yap_flag( debug, Debug, false),
'$stop_creeping'(Current). '$stop_creeping'(Current).
'$g2i'(user:G, Na/Ar ) :-
!,
functor(G, Na, Ar).
'$g2i'(prolog:G, Na/Ar ) :-
!,
functor(G, Na, Ar).
'$g2i'(M:G, M:Na/Ar ) :-
!,
functor(G, Na, Ar).
'$undef_cleanup'(Action,Debug,_Current) :- '$undef_cleanup'(Action,Debug,_Current) :-
yap_flag( unknown, _, Action), yap_flag( unknown, _, Action),