diff --git a/C/c_interface.c b/C/c_interface.c index fa8530c2c..dbf76ec95 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -1417,8 +1417,39 @@ YAP_ReadBuffer(char *s, Term *tp) BACKUP_H(); while ((t = Yap_StringToTerm(s,tp)) == 0L) { - if (!dogc()) - return FALSE; + if (Yap_ErrorMessage) { + if (!strcmp(Yap_ErrorMessage,"Stack Overflow")) { + if (!dogc()) { + *tp = MkAtomTerm(Yap_LookupAtom(Yap_ErrorMessage)); + Yap_ErrorMessage = NULL; + RECOVER_H(); + return 0L; + } + } else if (!strcmp(Yap_ErrorMessage,"Heap Overflow")) { + if (!Yap_growheap(FALSE, 0, NULL)) { + *tp = MkAtomTerm(Yap_LookupAtom(Yap_ErrorMessage)); + Yap_ErrorMessage = NULL; + RECOVER_H(); + return 0L; + } + } else if (!strcmp(Yap_ErrorMessage,"Trail Overflow")) { + if (!Yap_growtrail (0, FALSE)) { + *tp = MkAtomTerm(Yap_LookupAtom(Yap_ErrorMessage)); + Yap_ErrorMessage = NULL; + RECOVER_H(); + return 0L; + } + } else { + *tp = MkAtomTerm(Yap_LookupAtom(Yap_ErrorMessage)); + Yap_ErrorMessage = NULL; + RECOVER_H(); + return 0L; + } + Yap_ErrorMessage = NULL; + continue; + } else { + break; + } } RECOVER_H(); return t; diff --git a/C/iopreds.c b/C/iopreds.c index d91a9b034..f23524651 100755 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -6130,7 +6130,7 @@ Yap_StringToTerm(char *s,Term *tp) } t = Yap_Parse(); TR = TR_before_parse; - if (Yap_ErrorMessage) { + if (!t && !Yap_ErrorMessage) { if (tp) { *tp = syntax_error(tokstart, sno); } diff --git a/console/yap.c b/console/yap.c index b531a9a60..32b9ba912 100644 --- a/console/yap.c +++ b/console/yap.c @@ -765,7 +765,6 @@ init_standard_system(int argc, char *argv[], YAP_init_args *iap) iap->ErrorNo = 0; iap->ErrorCause = NULL; iap->QuietMode = FALSE; - iap->Argv0 = argv[0]; BootMode = parse_yap_arguments(argc,argv,iap); diff --git a/include/yap_structs.h b/include/yap_structs.h index 161313776..d009e5970 100644 --- a/include/yap_structs.h +++ b/include/yap_structs.h @@ -142,8 +142,6 @@ typedef struct { int ErrorNo; /* errorstring */ char *ErrorCause; - /* argv[0] */ - char *Argv0; } YAP_init_args;