debugging rts
This commit is contained in:
parent
38610c0b0d
commit
208438f0d0
@ -2206,8 +2206,8 @@ X_API Term YAP_ReadFromStream(int sno) {
|
|||||||
sigjmp_buf signew;
|
sigjmp_buf signew;
|
||||||
if (sigsetjmp(signew, 0)) {
|
if (sigsetjmp(signew, 0)) {
|
||||||
Yap_syntax_error(LOCAL_toktide, sno, "ReadFromStream");
|
Yap_syntax_error(LOCAL_toktide, sno, "ReadFromStream");
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
o = Yap_read_term(sno, TermNil, false);
|
o = Yap_read_term(sno, TermNil, false);
|
||||||
}
|
}
|
||||||
|
@ -2134,7 +2134,7 @@ static void shortstack( choiceptr b_ptr, CELL * env_ptr , buf_struct_t *bufp) {
|
|||||||
void DumpActiveGoals(USES_REGS1) {
|
void DumpActiveGoals(USES_REGS1) {
|
||||||
/* try to dump active goals */
|
/* try to dump active goals */
|
||||||
void *ep = YENV; /* and current environment */
|
void *ep = YENV; /* and current environment */
|
||||||
void *cp ;
|
void *cp = B;
|
||||||
PredEntry *pe;
|
PredEntry *pe;
|
||||||
struct buf_struct_t buf0, *bufp = &buf0;
|
struct buf_struct_t buf0, *bufp = &buf0;
|
||||||
|
|
||||||
|
84
C/terms.c
84
C/terms.c
@ -69,7 +69,7 @@ static inline void clean_tr(tr_fr_ptr TR0 USES_REGS) {
|
|||||||
} while (TR != TR0);
|
} while (TR != TR0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
static inline void clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
|
static inline void clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
|
||||||
tr_fr_ptr pt0 = TR;
|
tr_fr_ptr pt0 = TR;
|
||||||
while (pt0 != TR0) {
|
while (pt0 != TR0) {
|
||||||
@ -93,6 +93,7 @@ static inline void clean_dirty_tr(tr_fr_ptr TR0 USES_REGS) {
|
|||||||
///
|
///
|
||||||
/// @param USES_REGS
|
/// @param USES_REGS
|
||||||
///
|
///
|
||||||
|
|
||||||
static inline void clean_complex_tr(tr_fr_ptr TR0 USES_REGS) {
|
static inline void clean_complex_tr(tr_fr_ptr TR0 USES_REGS) {
|
||||||
tr_fr_ptr pt0 = TR;
|
tr_fr_ptr pt0 = TR;
|
||||||
while (pt0 != TR0) {
|
while (pt0 != TR0) {
|
||||||
@ -123,7 +124,7 @@ static inline void clean_complex_tr(tr_fr_ptr TR0 USES_REGS) {
|
|||||||
}
|
}
|
||||||
TR = TR0;
|
TR = TR0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Term old_var;
|
Term old_var;
|
||||||
Term new_var;
|
Term new_var;
|
||||||
@ -225,12 +226,7 @@ typedef struct non_single_struct_t {
|
|||||||
|
|
||||||
#define def_trail_overflow() \
|
#define def_trail_overflow() \
|
||||||
trail_overflow : { \
|
trail_overflow : { \
|
||||||
while (to_visit > to_visit0) { \
|
pop_text_stack(lvl); \
|
||||||
to_visit--; \
|
|
||||||
CELL *ptd0 = to_visit->ptd0; \
|
|
||||||
*ptd0 = to_visit->d0; \
|
|
||||||
} \
|
|
||||||
pop_text_stack(lvl); \
|
|
||||||
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL; \
|
LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL; \
|
||||||
LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *); \
|
LOCAL_Error_Size = (TR - TR0) * sizeof(tr_fr_ptr *); \
|
||||||
clean_tr(TR0 PASS_REGS); \
|
clean_tr(TR0 PASS_REGS); \
|
||||||
@ -619,20 +615,26 @@ static Term new_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
|
|||||||
CELL *InitialH = HR;
|
CELL *InitialH = HR;
|
||||||
CELL output = AbsPair(HR);
|
CELL output = AbsPair(HR);
|
||||||
|
|
||||||
|
{
|
||||||
|
int lvl = push_text_stack();
|
||||||
while (!IsVarTerm(inp) && IsPairTerm(inp)) {
|
while (!IsVarTerm(inp) && IsPairTerm(inp)) {
|
||||||
Term t = HeadOfTerm(inp);
|
Term t = HeadOfTerm(inp);
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
CELL *ptr = VarOfTerm(t);
|
CELL *ptr = VarOfTerm(t);
|
||||||
*ptr = TermFoundVar;
|
*ptr = TermFoundVar;
|
||||||
TrailTerm(TR++) = t;
|
TrailTerm(TR++) = t;
|
||||||
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
|
if ((tr_fr_ptr)LOCAL_TrailTop-TR < 1024) {
|
||||||
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true)) {
|
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true))
|
||||||
|
{
|
||||||
|
pop_text_stack(lvl);
|
||||||
goto trail_overflow;
|
goto trail_overflow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inp = TailOfTerm(inp);
|
inp = TailOfTerm(inp);
|
||||||
}
|
}
|
||||||
|
pop_text_stack(lvl);
|
||||||
|
}
|
||||||
|
|
||||||
WALK_COMPLEX_TERM();
|
WALK_COMPLEX_TERM();
|
||||||
|
|
||||||
@ -648,6 +650,12 @@ static Term new_vars_in_complex_term(register CELL *pt0, register CELL *pt0_end,
|
|||||||
/* next make sure noone will see this as a variable again */
|
/* next make sure noone will see this as a variable again */
|
||||||
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
|
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
|
||||||
/* Trail overflow */
|
/* Trail overflow */
|
||||||
|
while (to_visit > to_visit0)
|
||||||
|
{
|
||||||
|
to_visit--;
|
||||||
|
CELL *ptd0 = to_visit->ptd0;
|
||||||
|
*ptd0 = to_visit->d0;
|
||||||
|
}
|
||||||
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true)) {
|
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true)) {
|
||||||
goto trail_overflow;
|
goto trail_overflow;
|
||||||
}
|
}
|
||||||
@ -862,6 +870,12 @@ static Term bind_vars_in_complex_term(CELL *pt0, CELL *pt0_end,
|
|||||||
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
|
if (TR > (tr_fr_ptr)LOCAL_TrailTop - 256) {
|
||||||
/* Trail overflow */
|
/* Trail overflow */
|
||||||
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true)) {
|
if (!Yap_growtrail((TR - TR0) * sizeof(tr_fr_ptr *), true)) {
|
||||||
|
while (to_visit > to_visit0)
|
||||||
|
{
|
||||||
|
to_visit--;
|
||||||
|
CELL *ptd0 = to_visit->ptd0;
|
||||||
|
*ptd0 = to_visit->d0;
|
||||||
|
}
|
||||||
goto trail_overflow;
|
goto trail_overflow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1259,23 +1273,20 @@ static Term BREAK_LOOP(int ddep ) {
|
|||||||
return Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("@^"), 1), 1, &t0);
|
return Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("@^"), 1), 1, &t0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term UNFOLD_LOOP( Term t, Term *b, Term *l) {
|
static Term UNFOLD_LOOP( Term t, Term *b, Term l) {
|
||||||
Term ti = Yap_MkNewApplTerm(FunctorEq, 2);
|
Term ti = Yap_MkNewApplTerm(FunctorEq, 2);
|
||||||
RepAppl(ti)[2] = t;
|
RepAppl(ti)[2] = t;
|
||||||
Term o = RepAppl(ti)[1];
|
Term o = RepAppl(ti)[1];
|
||||||
HR[0] = ti;
|
HR[0] = ti;
|
||||||
HR[1] = *l;
|
HR[1] = l;
|
||||||
l[0] = AbsPair(HR);
|
*b = AbsPair(HR);
|
||||||
if (b!=NULL && *b==TermNil)
|
b = HR+1;
|
||||||
b = l;
|
|
||||||
l = HR+1;
|
|
||||||
|
|
||||||
HR+=2;
|
HR+=2;
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int loops_in_complex_term(CELL *pt0, CELL *pt0_end, Term *listp, Term *endp USES_REGS) {
|
static int loops_in_complex_term(CELL *pt0, CELL *pt0_end, Term *listp, Term tail USES_REGS) {
|
||||||
int lvl = push_text_stack();
|
int lvl = push_text_stack();
|
||||||
|
|
||||||
struct non_single_struct_t *to_visit = Malloc(
|
struct non_single_struct_t *to_visit = Malloc(
|
||||||
@ -1308,7 +1319,7 @@ restart:
|
|||||||
// LIST0;
|
// LIST0;
|
||||||
struct non_single_struct_t *v0 = (struct non_single_struct_t *)AtomOfTerm(d0);
|
struct non_single_struct_t *v0 = (struct non_single_struct_t *)AtomOfTerm(d0);
|
||||||
if (listp) {
|
if (listp) {
|
||||||
*ptd0 = UNFOLD_LOOP(AbsPair(headp), listp, endp);
|
*ptd0 = UNFOLD_LOOP(AbsPair(headp), listp, tail);
|
||||||
} else {
|
} else {
|
||||||
*ptd0 = BREAK_LOOP(to_visit-v0);
|
*ptd0 = BREAK_LOOP(to_visit-v0);
|
||||||
}
|
}
|
||||||
@ -1320,8 +1331,8 @@ restart:
|
|||||||
to_visit->ptd0 = headp;
|
to_visit->ptd0 = headp;
|
||||||
to_visit->d0 = d0;
|
to_visit->d0 = d0;
|
||||||
*headp = MkAtomTerm((AtomEntry*)to_visit);
|
*headp = MkAtomTerm((AtomEntry*)to_visit);
|
||||||
to_visit++;
|
to_visit++;
|
||||||
pt0 = headp;
|
pt0 = headp;
|
||||||
pt0_end = pt0 + 1;
|
pt0_end = pt0 + 1;
|
||||||
ptd0 = pt0;
|
ptd0 = pt0;
|
||||||
goto list_loop;
|
goto list_loop;
|
||||||
@ -1335,23 +1346,21 @@ restart:
|
|||||||
if (IsAtomTerm((CELL)f)) {
|
if (IsAtomTerm((CELL)f)) {
|
||||||
|
|
||||||
if (listp) {
|
if (listp) {
|
||||||
*ptd0 = UNFOLD_LOOP(AbsAppl(ap2), listp, endp);
|
*ptd0 = UNFOLD_LOOP(AbsAppl(ap2), listp, tail);
|
||||||
} else {
|
} else {
|
||||||
*ptd0 = BREAK_LOOP(to_visit-(struct non_single_struct_t *)AtomOfTerm(*ap2));
|
*ptd0 = BREAK_LOOP(to_visit-(struct non_single_struct_t *)AtomOfTerm(*ap2));
|
||||||
}
|
}
|
||||||
goto restart;
|
goto restart; }
|
||||||
}
|
// STRUCT0;
|
||||||
// STRUCT0;
|
if (to_visit + 32 >= to_visit_max) {
|
||||||
if (to_visit + 32 >= to_visit_max) {
|
goto aux_overflow;
|
||||||
goto aux_overflow;
|
}
|
||||||
}
|
to_visit->pt0 = pt0;
|
||||||
to_visit->pt0 = pt0;
|
to_visit->pt0_end = pt0_end;
|
||||||
to_visit->pt0_end = pt0_end;
|
to_visit->ptd0 = ap2;
|
||||||
to_visit->ptd0 = ap2;
|
to_visit->d0 = *ap2;
|
||||||
to_visit->d0 = *ap2;
|
|
||||||
*ap2 = MkAtomTerm((AtomEntry*)to_visit);
|
*ap2 = MkAtomTerm((AtomEntry*)to_visit);
|
||||||
to_visit++;
|
to_visit++;
|
||||||
|
|
||||||
pt0 = ap2;
|
pt0 = ap2;
|
||||||
pt0_end = ap2 + (ArityOfFunctor(f));
|
pt0_end = ap2 + (ArityOfFunctor(f));
|
||||||
}
|
}
|
||||||
@ -1379,7 +1388,7 @@ restart:
|
|||||||
def_aux_overflow();
|
def_aux_overflow();
|
||||||
}
|
}
|
||||||
|
|
||||||
Term Yap_CheckLoops(Term inp, UInt arity, Term *listp, Term *endp USES_REGS) {
|
Term Yap_CheckCycles(Term inp, UInt arity, Term *listp, Term tail USES_REGS) {
|
||||||
Term t = Deref(inp);
|
Term t = Deref(inp);
|
||||||
|
|
||||||
if (IsVarTerm(t) || IsPrimitiveTerm(t)) {
|
if (IsVarTerm(t) || IsPrimitiveTerm(t)) {
|
||||||
@ -1387,7 +1396,7 @@ Term Yap_CheckLoops(Term inp, UInt arity, Term *listp, Term *endp USES_REGS) {
|
|||||||
} else {
|
} else {
|
||||||
Int res;
|
Int res;
|
||||||
|
|
||||||
res = loops_in_complex_term((&t) - 1, &t, listp, endp PASS_REGS);
|
res = loops_in_complex_term((&t) - 1, &t, listp, tail PASS_REGS);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return t;
|
return t;
|
||||||
@ -1410,7 +1419,8 @@ static Int p_break_rational(USES_REGS1)
|
|||||||
{
|
{
|
||||||
Term t = Yap_CopyTerm(Deref(ARG1));
|
Term t = Yap_CopyTerm(Deref(ARG1));
|
||||||
Term l = Deref(ARG4), k;
|
Term l = Deref(ARG4), k;
|
||||||
return Yap_unify(Yap_CheckLoops(t, 4, &k, &l PASS_REGS), ARG2) && Yap_unify(k, ARG3);
|
if (IsVarTerm(l)) Yap_unify(l, MkVarTerm());
|
||||||
|
return Yap_unify(Yap_CheckCycles(t, 4, &k, l PASS_REGS), ARG2) && Yap_unify(k, ARG3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Yap_InitTermCPreds(void) {
|
void Yap_InitTermCPreds(void) {
|
||||||
|
43
C/write.c
43
C/write.c
@ -1080,39 +1080,22 @@ void Yap_plwrite(Term t, StreamDesc *mywrite, int max_depth, int flags,
|
|||||||
/* write options */
|
/* write options */
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
|
yhandle_t lvl = push_text_stack();
|
||||||
struct write_globs wglb;
|
struct write_globs wglb;
|
||||||
struct rewind_term rwt;
|
struct rewind_term rwt;
|
||||||
yhandle_t sls = Yap_CurrentSlot();
|
|
||||||
int lvl = push_text_stack();
|
|
||||||
|
|
||||||
if (t == 0)
|
|
||||||
return;
|
|
||||||
if (!mywrite) {
|
|
||||||
CACHE_REGS
|
|
||||||
wglb.stream = GLOBAL_Stream + LOCAL_c_error_stream;
|
|
||||||
} else
|
|
||||||
wglb.stream = mywrite;
|
|
||||||
wglb.lw = start;
|
|
||||||
wglb.last_atom_minus = FALSE;
|
|
||||||
wglb.Quote_illegal = flags & Quote_illegal_f;
|
|
||||||
wglb.Handle_vars = flags & Handle_vars_f;
|
|
||||||
wglb.Use_portray = flags & Use_portray_f;
|
|
||||||
wglb.Portray_delays = flags & AttVar_Portray_f;
|
|
||||||
wglb.MaxDepth = max_depth;
|
|
||||||
wglb.MaxArgs = max_depth;
|
|
||||||
/* notice: we must have ASP well set when using portray, otherwise
|
|
||||||
we cannot make recursive Prolog calls */
|
|
||||||
wglb.Keep_terms = (flags & (Use_portray_f | To_heap_f));
|
|
||||||
/* initialize wglb */
|
|
||||||
rwt.parent = NULL;
|
rwt.parent = NULL;
|
||||||
|
wglb.stream = mywrite;
|
||||||
wglb.Ignore_ops = flags & Ignore_ops_f;
|
wglb.Ignore_ops = flags & Ignore_ops_f;
|
||||||
wglb.Write_strings = flags & BackQuote_String_f;
|
wglb.Write_strings = flags & BackQuote_String_f;
|
||||||
// if (!(flags & Ignore_cyclics_f) && false)
|
if (!(flags & Ignore_cyclics_f)) {
|
||||||
{
|
Term t1 = Yap_CopyTerm(t);
|
||||||
t = Yap_CheckLoops(t, 1, NULL, NULL PASS_REGS);
|
t1 = Yap_CheckCycles(t1, 1, NULL, TermNil PASS_REGS);
|
||||||
}
|
writeTerm(t1, priority, 1, false, &wglb, &rwt);
|
||||||
/* protect slots for portray */
|
} else {
|
||||||
writeTerm(t, priority, 1, FALSE, &wglb, &rwt);
|
/* protect slots for portray */
|
||||||
|
writeTerm(t, priority, 1, false, &wglb, &rwt);
|
||||||
|
}
|
||||||
if (flags & New_Line_f) {
|
if (flags & New_Line_f) {
|
||||||
if (flags & Fullstop_f) {
|
if (flags & Fullstop_f) {
|
||||||
wrputc('.', wglb.stream);
|
wrputc('.', wglb.stream);
|
||||||
@ -1126,7 +1109,5 @@ void Yap_plwrite(Term t, StreamDesc *mywrite, int max_depth, int flags,
|
|||||||
wrputc(' ', wglb.stream);
|
wrputc(' ', wglb.stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Yap_CloseSlots(sls);
|
|
||||||
pop_text_stack(lvl);
|
pop_text_stack(lvl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,7 +445,7 @@ bool Yap_isDirectory(const char *FileName);
|
|||||||
extern bool Yap_Exists(const char *f);
|
extern bool Yap_Exists(const char *f);
|
||||||
|
|
||||||
/* terms.c */
|
/* terms.c */
|
||||||
extern Term Yap_CheckLoops(Term inp, UInt arity, Term *listp, Term *endp USES_REGS);
|
extern Term Yap_CheckCycles(Term inp, UInt arity, Term *listp, Term tail USES_REGS);
|
||||||
extern void Yap_InitTermCPreds(void);
|
extern void Yap_InitTermCPreds(void);
|
||||||
|
|
||||||
/* threads.c */
|
/* threads.c */
|
||||||
|
@ -592,7 +592,7 @@ void Yap_DebugPlWriteln(Term t) {
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (t == 0)
|
if (t == 0)
|
||||||
fprintf(stderr, "NULL");
|
fprintf(stderr, "NULL");
|
||||||
Yap_plwrite(t, NULL, 15, 0, GLOBAL_MaxPriority);
|
Yap_plwrite(t, GLOBAL_Stream+LOCAL_c_error_stream , 0, 0, GLOBAL_MaxPriority);
|
||||||
Yap_DebugPutc(GLOBAL_Stream[LOCAL_c_error_stream].file, '.');
|
Yap_DebugPutc(GLOBAL_Stream[LOCAL_c_error_stream].file, '.');
|
||||||
Yap_DebugPutc(GLOBAL_Stream[LOCAL_c_error_stream].file, 10);
|
Yap_DebugPutc(GLOBAL_Stream[LOCAL_c_error_stream].file, 10);
|
||||||
}
|
}
|
||||||
|
@ -389,7 +389,7 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod, Int newpos, bool
|
|||||||
Yap_local.ActiveError->parserFile =
|
Yap_local.ActiveError->parserFile =
|
||||||
RepAtom(AtomOfTerm((GLOBAL_Stream + sno)->user_name))->StrOfAE;
|
RepAtom(AtomOfTerm((GLOBAL_Stream + sno)->user_name))->StrOfAE;
|
||||||
Yap_local.ActiveError->parserReadingCode = code;
|
Yap_local.ActiveError->parserReadingCode = code;
|
||||||
int lvl = push_text_stack();
|
|
||||||
if (GLOBAL_Stream[sno].status & Seekable_Stream_f)
|
if (GLOBAL_Stream[sno].status & Seekable_Stream_f)
|
||||||
{
|
{
|
||||||
char *o, *o2;
|
char *o, *o2;
|
||||||
@ -415,7 +415,7 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod, Int newpos, bool
|
|||||||
o = malloc(sza);
|
o = malloc(sza);
|
||||||
char *p = o;
|
char *p = o;
|
||||||
{
|
{
|
||||||
size_t siz = fread(p, tot - 1, 1, GLOBAL_Stream[sno].file);
|
ssize_t siz = fread(p, tot - 1, 1, GLOBAL_Stream[sno].file);
|
||||||
if (siz < 0)
|
if (siz < 0)
|
||||||
Yap_Error(EVALUATION_ERROR_READ_STREAM, GLOBAL_Stream[sno].user_name, "%s", strerror(errno));
|
Yap_Error(EVALUATION_ERROR_READ_STREAM, GLOBAL_Stream[sno].user_name, "%s", strerror(errno));
|
||||||
o[sza - 1] = '\0';
|
o[sza - 1] = '\0';
|
||||||
@ -432,7 +432,7 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod, Int newpos, bool
|
|||||||
o2 = malloc(sza);
|
o2 = malloc(sza);
|
||||||
char *p = o2;
|
char *p = o2;
|
||||||
{
|
{
|
||||||
size_t siz = fread(p, tot - 1, 1, GLOBAL_Stream[sno].file);
|
ssize_t siz = fread(p, tot - 1, 1, GLOBAL_Stream[sno].file);
|
||||||
if (siz < 0)
|
if (siz < 0)
|
||||||
Yap_Error(EVALUATION_ERROR_READ_STREAM, GLOBAL_Stream[sno].user_name, "%s", strerror(errno));
|
Yap_Error(EVALUATION_ERROR_READ_STREAM, GLOBAL_Stream[sno].user_name, "%s", strerror(errno));
|
||||||
|
|
||||||
@ -498,7 +498,6 @@ static Term syntax_error(TokEntry *errtok, int sno, Term cmod, Int newpos, bool
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "SYNTAX ERROR while booting: ");
|
fprintf(stderr, "SYNTAX ERROR while booting: ");
|
||||||
}
|
}
|
||||||
pop_text_stack(lvl);
|
|
||||||
return Yap_MkFullError();
|
return Yap_MkFullError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user