From 74b2b5561d3a01b1762e8a8a71d58c78e39d3697 Mon Sep 17 00:00:00 2001 From: V'itor Santos Costa Date: Thu, 11 Feb 2016 06:00:56 -0800 Subject: [PATCH] - add debugging code to memory allocation = atom to number: cleanup function name as this is more than just supporting SWI - SrcMask only applies to rules. - add auxiliary type/error function - fix typos - fix enumeration mode in current_flag - get rid of TrueName routines, use AbsoluteFileName instead. - detail synatx error source --- C/alloc.c | 22 +++++++++++++++++- C/c_interface.c | 42 ++++++++++++++++++++++------------- C/cdmgr.c | 4 ++-- C/errors.c | 20 +++++++++++++++-- C/exec.c | 2 +- C/flags.c | 22 +++++++++--------- C/init.c | 7 ------ C/load_aix.c | 2 +- C/load_aout.c | 9 ++++---- C/parser.c | 59 +++++++++++++++++++++++++------------------------ C/save.c | 4 ++-- C/scanner.c | 1 + C/text.c | 2 +- 13 files changed, 121 insertions(+), 75 deletions(-) diff --git a/C/alloc.c b/C/alloc.c index b391cb152..db870641d 100644 --- a/C/alloc.c +++ b/C/alloc.c @@ -60,11 +60,31 @@ static char SccsId[] = "%W% %G%"; /************************************************************************/ /* Yap workspace management */ +#define MASK 0x968e00 #if USE_SYSTEM_MALLOC +#if 0 +inline static void * my_malloc(size_t sz) +{ + void *p; + p = malloc(sz); + // Yap_DebugPuts(stderr,"gof\n"); + return p; +} +inline static void my_free(void *p) +{ + printf("f %p\n",p); + free(p); + if (((CELL)p & 0xffffff00) == MASK) jmp_deb(1); + // Yap_DebugPuts(stderr,"gof\n"); +} +#else #define my_malloc(sz) malloc(sz) +#define my_free(ptr) free(ptr) + + +#endif #define my_realloc(ptr, sz, osz, safe) realloc(ptr, sz) #define my_realloc0(ptr, sz) realloc(ptr, sz) -#define my_free(ptr) free(ptr) #else #define my_malloc(sz) Yap_dlmalloc(sz) #define my_realloc0(ptr, sz) Yap_dlrealloc(ptr, sz) diff --git a/C/c_interface.c b/C/c_interface.c index e05b56495..b745b1226 100755 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -58,6 +58,9 @@ #include #endif +typedef void *atom_t; +typedef void *functor_t; + typedef enum { FRG_FIRST_CALL = 0, /* Initial call */ FRG_CUTTED = 1, /* Context was cutted */ @@ -2094,10 +2097,14 @@ X_API int YAP_InitConsult(int mode, const char *filename, int *osnop) { } bool consulted = (mode == YAP_CONSULT_MODE); Yap_init_consult(consulted, filename); - f = fopen(Yap_AbsoluteFile(filename, LOCAL_FileNameBuf, FILENAME_MAX - 1), - "r"); + const char *full = Yap_AbsoluteFile(filename, true); + if (!full) + return -1; + f = fopen( full, "r"); if (!f) return -1; + else + free( (char *)full ); sno = Yap_OpenStream(f, NULL, TermNil, Input_Stream_f); *osnop = Yap_CheckAlias(AtomLoopStream); if (!Yap_AddAlias(AtomLoopStream, sno)) { @@ -3380,30 +3387,35 @@ X_API int YAP_RequiresExtraStack(size_t sz) { return TRUE; } + atom_t *TR_Atoms; + functor_t *TR_Functors; + size_t AtomTranslations, MaxAtomTranslations; + size_t FunctorTranslations, MaxFunctorTranslations; + X_API Int YAP_AtomToInt(Atom At) { TranslationEntry *te = Yap_GetTranslationProp(At, 0); if (te != NIL) return te->Translation; - SWI_Atoms[AtomTranslations] = At; + TR_Atoms[AtomTranslations] = At; Yap_PutAtomTranslation(At, 0, AtomTranslations); AtomTranslations++; if (AtomTranslations == MaxAtomTranslations) { - Atom *nt = (Atom *)malloc(sizeof(Atom) * 2 * MaxAtomTranslations), - *ot = SWI_Atoms; + atom_t *ot = TR_Atoms; + atom_t *nt = (atom_t *)malloc(sizeof(atom_t) * 2 * MaxAtomTranslations); if (nt == NULL) { Yap_Error(SYSTEM_ERROR_INTERNAL, MkAtomTerm(At), "No more room for translations"); return -1; } - memcpy(nt, ot, sizeof(Atom) * MaxAtomTranslations); - SWI_Atoms = nt; + memcpy(nt, ot, sizeof(atom_t) * MaxAtomTranslations); + TR_Atoms = nt; free(ot); MaxAtomTranslations *= 2; } return AtomTranslations - 1; } -X_API Atom YAP_IntToAtom(Int i) { return SWI_Atoms[i]; } +X_API Atom YAP_IntToAtom(Int i) { return TR_Atoms[i]; } X_API Int YAP_FunctorToInt(Functor f) { Atom At = NameOfFunctor(f); @@ -3411,27 +3423,27 @@ X_API Int YAP_FunctorToInt(Functor f) { TranslationEntry *te = Yap_GetTranslationProp(At, arity); if (te != NIL) return te->Translation; - SWI_Functors[FunctorTranslations] = f; + TR_Functors[FunctorTranslations] = f; Yap_PutAtomTranslation(At, arity, FunctorTranslations); FunctorTranslations++; if (FunctorTranslations == MaxFunctorTranslations) { - Functor *nt = - (Functor *)malloc(sizeof(Functor) * 2 * MaxFunctorTranslations), - *ot = SWI_Functors; + functor_t *nt = + (functor_t *)malloc(sizeof(functor_t) * 2 * MaxFunctorTranslations), + *ot = TR_Functors; if (nt == NULL) { Yap_Error(SYSTEM_ERROR_INTERNAL, MkAtomTerm(At), "No more room for translations"); return -1; } - memcpy(nt, ot, sizeof(Functor) * MaxFunctorTranslations); - SWI_Functors = nt; + memcpy(nt, ot, sizeof(functor_t) * MaxFunctorTranslations); + TR_Functors = nt; free(ot); MaxFunctorTranslations *= 2; } return FunctorTranslations - 1; } -X_API Functor YAP_IntToFunctor(Int i) { return SWI_Functors[i]; } +X_API Functor YAP_IntToFunctor(Int i) { return TR_Functors[i]; } #endif // C_INTERFACE_C diff --git a/C/cdmgr.c b/C/cdmgr.c index e60de6425..6d4f99fff 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -3647,7 +3647,7 @@ static Int fetch_next_static_clause(PredEntry *pe, yamop *i_code, Term th, don't do this!! I might have stored a choice-point and changed ASP Yap_RecoverSlots(3); */ - if (cl == NULL || !(cl->ClFlags & SrcMask)) { + if (cl == NULL || !(pe->PredFlags & SourcePredFlag)) { UNLOCKPE(45, pe); return false; } @@ -3703,7 +3703,7 @@ static Int fetch_next_static_clause(PredEntry *pe, yamop *i_code, Term th, P = cl->ClCode; } UNLOCKPE(45, pe); - return TRUE; + return true; } else { Term t; diff --git a/C/errors.c b/C/errors.c index 63ec1424e..d433c722f 100755 --- a/C/errors.c +++ b/C/errors.c @@ -133,7 +133,7 @@ bool Yap_PrintWarning(Term twarning) { CACHE_REGS PredEntry *pred = RepPredProp(PredPropByFunc( FunctorPrintMessage, PROLOG_MODULE)); // PROCEDURE_print_message2; - Term cmod = CurrentModule; + Term cmod = ( CurrentModule == PROLOG_MODULE ? TermProlog : CurrentModule ); bool rc; Term ts[2]; @@ -157,6 +157,8 @@ bool Yap_PrintWarning(Term twarning) { } ts[1] = twarning; ts[0] = MkAtomTerm(AtomWarning); + HB = B->cp_h = HR; + B->cp_tr = TR; rc = Yap_execute_pred(pred, ts, true PASS_REGS); LOCAL_within_print_message = false; LOCAL_DoingUndefp = false; @@ -613,7 +615,7 @@ static Int is_boolean( USES_REGS1 ) { Term t = Deref(ARG1); - //Term Context = Deref(ARG2); + //Term Context = Deref(ARG2)Yap_Error(INSTANTIATION_ERROR, t, NULL);; if (IsVarTerm(t)) { Yap_Error(INSTANTIATION_ERROR, t, NULL); return false; @@ -621,6 +623,19 @@ is_boolean( USES_REGS1 ) return t == TermTrue || t == TermFalse; } +static Int +is_atom( USES_REGS1 ) +{ + Term t = Deref(ARG1); + //Term Context = Deref(ARG2)Yap_Error(INSTANTIATION_ERROR, t, NULL);; + if (IsVarTerm(t)) { + Yap_Error(INSTANTIATION_ERROR, t, NULL); + return false; + } + return IsAtomTerm( t ); +} + + static Int is_callable( USES_REGS1 ) @@ -699,6 +714,7 @@ Yap_InitErrorPreds( void ) CurrentModule = ERROR_MODULE; Yap_InitCPred("is_boolean", 2, is_boolean, TestPredFlag); Yap_InitCPred("is_callable", 2, is_callable, TestPredFlag); + Yap_InitCPred("is_atom", 2, is_atom, TestPredFlag); Yap_InitCPred("is_predicate_indicator", 2, is_predicate_indicator, TestPredFlag); CurrentModule = cm; } diff --git a/C/exec.c b/C/exec.c index eefb7dd2c..9649b8a72 100755 --- a/C/exec.c +++ b/C/exec.c @@ -1037,7 +1037,7 @@ static Int exec_absmi(bool top, yap_reset_t reset_mode USES_REGS) { LOCAL_PrologMode = UserMode; } break; case 3: { /* saved state */ - return FALSE; + return false; } default: /* do nothing */ diff --git a/C/flags.c b/C/flags.c index b2ba41153..01b2cb7f5 100644 --- a/C/flags.c +++ b/C/flags.c @@ -104,7 +104,7 @@ static bool dqf1(ModEntry *new, Term t2 USES_REGS) { /* bad argument, but still an atom */ Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, t2, "bad option %s for backquoted " "string flag, use one string, " - "arom, codes or chars", + "atom, codes or chars", RepAtom(AtomOfTerm(t2))->StrOfAE); return false; } else { @@ -139,7 +139,7 @@ static bool bqf1(ModEntry *new, Term t2 USES_REGS) { } Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, t2, "bad option %s for backquoted " "string flag, use one string, " - "arom, codes or chars", + "atom, codes or chars", RepAtom(AtomOfTerm(t2))->StrOfAE); return false; } else { @@ -589,9 +589,10 @@ static void initFlag(flag_info *f, int fnum, bool global) { static bool executable(Term inp) { CACHE_REGS - if (GLOBAL_argv && GLOBAL_argv[0]) - Yap_TrueFileName(GLOBAL_argv[0], LOCAL_FileNameBuf, FALSE); - else + if (GLOBAL_argv && GLOBAL_argv[0]) { + if (!Yap_AbsoluteFileInBuffer(GLOBAL_argv[0], LOCAL_FileNameBuf, YAP_FILENAME_MAX - 1,true)) + return false; + } else strncpy(LOCAL_FileNameBuf, Yap_FindExecutable(), YAP_FILENAME_MAX - 1); return Yap_unify(MkAtomTerm(Yap_LookupAtom(LOCAL_FileNameBuf)), inp); @@ -880,8 +881,7 @@ static Int cont_current_prolog_flag(USES_REGS1) { } EXTRA_CBACK_ARG(2, 1) = MkIntTerm(++i); flag = getYapFlag(f); - if (!Yap_unify(f, ARG2)) - return false; + return Yap_unify(flag, ARG2); } cut_fail(); } @@ -1294,7 +1294,8 @@ do_prolog_flag_property(Term tflag, args = Yap_ArgList2ToVector(opts, prolog_flag_property_defs, PROLOG_FLAG_PROPERTY_END); if (args == NULL) { - return FALSE; + Yap_Error( LOCAL_Error_TYPE, LOCAL_Error_Term, NULL ); + return false; } if (!IsAtomTerm(tflag)) { if (IsApplTerm(tflag) && FunctorOfTerm(tflag) == FunctorModule) { @@ -1454,8 +1455,9 @@ static Int do_create_prolog_flag(USES_REGS1) { args = Yap_ArgList2ToVector(opts, prolog_flag_property_defs, PROLOG_FLAG_PROPERTY_END); - if (args == NULL) { - return FALSE; + if (args == NULL) { + Yap_Error( LOCAL_Error_TYPE, LOCAL_Error_Term, NULL ); + return false; } fv = GetFlagProp(AtomOfTerm(tflag)); if (fv) { diff --git a/C/init.c b/C/init.c index 1a8e91246..95ab88b4c 100755 --- a/C/init.c +++ b/C/init.c @@ -1028,13 +1028,6 @@ static void InitLogDBErasedMarker(void) { INIT_CLREF_COUNT(LogDBErasedMarker); } -static void InitSWIAtoms(void) { - MaxAtomTranslations = N_SWI_ATOMS; - MaxFunctorTranslations = N_SWI_FUNCTORS; - SWI_Atoms = (Atom *)malloc(sizeof(Atom) * MaxAtomTranslations); - SWI_Functors = (Functor *)malloc(sizeof(Functor) * 2 * N_SWI_ATOMS); -} - static void InitEmptyWakeups(void) {} static void InitAtoms(void) { diff --git a/C/load_aix.c b/C/load_aix.c index 8cd864d6f..52727b879 100644 --- a/C/load_aix.c +++ b/C/load_aix.c @@ -69,7 +69,7 @@ LoadForeign(StringList ofiles, StringList libs, strcpy(LOCAL_ErrorSay," Load Failed: in AIX you must load a single object file"); return LOAD_FAILLED; } - if (!Yap_TrueFileName(AtomName(ofiles->name), LOCAL_FileNameBuf, TRUE)) { + if (!Yap_AbsoluteFileInBuffer(AtomName(ofiles->name), LOCAL_FileNameBuf, YAP_FILENAME_MAX, true)) { strcpy(LOCAL_ErrorSay, " Trying to open unexisting file in LoadForeign "); return LOAD_FAILLED; } diff --git a/C/load_aout.c b/C/load_aout.c index 52d9cb1d2..c7cb68c09 100644 --- a/C/load_aout.c +++ b/C/load_aout.c @@ -67,7 +67,8 @@ Yap_FindExecutable(void) if (*GLOBAL_argv[0] == '/') { if (oktox(GLOBAL_argv[0])) { strcpy(LOCAL_FileNameBuf, GLOBAL_argv[0]); - Yap_TrueFileName(LOCAL_FileNameBuf, GLOBAL_Executable, TRUE); + Yap_AbsoluteFileInBuffer(LOCAL_FileNameBuf, true); + strncpy( GLOBAL_Executable, LOCAL_FileNameBuf, YAP_MAXPATHLEN); return; } } @@ -87,12 +88,12 @@ Yap_FindExecutable(void) cp++; if (!oktox(LOCAL_FileNameBuf)) continue; - Yap_TrueFileName(LOCAL_FileNameBuf, GLOBAL_Executable, TRUE); + Yap_AbsoluteFileInBuffer(Yap_AbsoluteFileInBuffer(LOCAL_FileNameBuf, GLOBAL_Executable, TRUE); return; } /* one last try for dual systems */ - strcpy(LOCAL_FileNameBuf, GLOBAL_argv[0]); - Yap_TrueFileName(LOCAL_FileNameBuf, GLOBAL_Executable, TRUE); + strcpy(LOCAL_FileNameBuf, GLOBAL_argv[0]); + Yap_AbsoluteFileInBuffer(Yap_AbsoluteFileInBuffer(LOCAL_FileNameBuf, GLOBAL_Executable, TRUE); if (oktox(GLOBAL_Executable)) return GLOBAL_Executable; else diff --git a/C/parser.c b/C/parser.c index ed55f6a7c..d5b06527c 100755 --- a/C/parser.c +++ b/C/parser.c @@ -175,10 +175,11 @@ static void syntax_msg(const char *msg, ...) { va_list ap; if (LOCAL_toktide == LOCAL_tokptr) { + char out[YAP_FILENAME_MAX]; va_start(ap, msg); - vsnprintf(LOCAL_FileNameBuf2, YAP_FILENAME_MAX - 1, msg, ap); - LOCAL_ErrorMessage = LOCAL_FileNameBuf2; - LOCAL_Error_TYPE = SYNTAX_ERROR; + vsnprintf(out, YAP_FILENAME_MAX - 1, msg, ap); + LOCAL_Error_Term = MkStringTerm( out ); + LOCAL_Error_TYPE = SYNTAX_ERROR; va_end(ap); } } @@ -463,7 +464,7 @@ inline static void checkfor(wchar_t c, JMPBUFF *FailBuff USES_REGS) { LOCAL_tokptr->TokInfo != (Term)c) { char s[1024]; strncpy(s, Yap_tokRep(LOCAL_tokptr), 1023); - syntax_msg("expected to find \'%c\', found %s", c, s); + syntax_msg("line %d: expected to find \'%c\', found %s", LOCAL_tokptr->TokPos, c, s); FAIL; } NextToken; @@ -543,12 +544,12 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff, func = Yap_MkFunctor(a, 1); if (func == NULL) { - syntax_msg("Heap Overflow"); + syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos ); FAIL; } t = Yap_MkApplTerm(func, nargs, p); if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos ); return TermNil; } NextToken; @@ -558,7 +559,7 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff, while (1) { Term *tp = (Term *)ParserAuxSp; if (ParserAuxSp + 1 > LOCAL_TrailTop) { - syntax_msg("Trail Overflow"); + syntax_msg("line %d: Trail Overflow",LOCAL_tokptr->TokPos); FAIL; } *tp++ = Unsigned(ParseTerm(999, FailBuff PASS_REGS)); @@ -576,12 +577,12 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff, * order */ if (HR > ASP - (nargs + 1)) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } func = Yap_MkFunctor(a, nargs); if (func == NULL) { - syntax_msg("Heap Overflow"); + syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos); FAIL; } #ifdef SFUNC @@ -596,7 +597,7 @@ static Term ParseArgs(Atom a, wchar_t close, JMPBUFF *FailBuff, t = Yap_MkApplTerm(func, nargs, p); #endif if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); return TermNil; } /* check for possible overflow against local stack */ @@ -631,7 +632,7 @@ loop: /* check for possible overflow against local stack */ if (HR > ASP - 4096) { to_store[1] = TermNil; - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow" ,LOCAL_tokptr->TokPos); FAIL; } else { to_store[1] = AbsPair(HR); @@ -645,7 +646,7 @@ loop: to_store[1] = MkAtomTerm(AtomNil); } } else { - syntax_msg("looking for symbol ',','|' got symbol '%s'", + syntax_msg("line %d: looking for symbol ',','|' got symbol '%s'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr)); FAIL; } @@ -717,14 +718,14 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { TRY( /* build appl on the heap */ func = Yap_MkFunctor((Atom)t, 1); if (func == NULL) { - syntax_msg("Heap Overflow"); + syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos); FAIL; } t = ParseTerm(oprprio, FailBuff PASS_REGS); t = Yap_MkApplTerm(func, 1, &t); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } curprio = opprio; , break;) @@ -750,7 +751,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { LOCAL_Error_TYPE = YAP_NO_ERROR; t = Yap_CharsToTDQ(p, CurrentModule, LOCAL_encoding PASS_REGS); if (!t) { - syntax_msg("could not convert \"%s\"", (char *)LOCAL_tokptr->TokInfo); + syntax_msg("line %d: could not convert \"%s\"",LOCAL_tokptr->TokPos, (char *)LOCAL_tokptr->TokInfo); FAIL; } LOCAL_Error_TYPE = oerr; @@ -765,7 +766,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { LOCAL_Error_TYPE = YAP_NO_ERROR; t = Yap_WCharsToTDQ(p, CurrentModule PASS_REGS); if (!t) { - syntax_msg("could not convert \'%S\'", (wchar_t *)LOCAL_tokptr->TokInfo); + syntax_msg("line %d: could not convert \'%S\'",LOCAL_tokptr->TokPos, (wchar_t *)LOCAL_tokptr->TokInfo); FAIL; } LOCAL_Error_TYPE = oerr; @@ -781,7 +782,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { t = Yap_CharsToTBQ(p, CurrentModule, LOCAL_encoding PASS_REGS); if (!t) { - syntax_msg("could not convert \'%s\"", (char *)LOCAL_tokptr->TokInfo); + syntax_msg("line %d: could not convert \'%s\"",LOCAL_tokptr->TokPos, (char *)LOCAL_tokptr->TokInfo); FAIL; } LOCAL_Error_TYPE = oerr; @@ -796,7 +797,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { yap_error_number oerr = LOCAL_Error_TYPE; LOCAL_Error_TYPE = YAP_NO_ERROR; if (!t) { - syntax_msg("could not convert \"%S\"", (wchar_t *)LOCAL_tokptr->TokInfo); + syntax_msg("line %d: could not convert \"%S\"",LOCAL_tokptr->TokPos, (wchar_t *)LOCAL_tokptr->TokInfo); FAIL; } LOCAL_Error_TYPE = oerr; @@ -812,7 +813,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { break; case Error_tok: - syntax_msg("found ill-formed \"%s\"", Yap_tokRep(LOCAL_tokptr)); + syntax_msg("line %d: found ill-formed \"%s\"",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr)); FAIL; case Ponctuation_tok: @@ -847,13 +848,13 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { t = Yap_MkApplTerm(FunctorBraces, 1, &t); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } checkfor('}', FailBuff PASS_REGS); break; default: - syntax_msg("unexpected ponctuation signal %s", Yap_tokRep(LOCAL_tokptr)); + syntax_msg("line %d: unexpected ponctuation signal %s",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr)); FAIL; } break; @@ -944,7 +945,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { NextToken; break; default: - syntax_msg("expected operator, got \'%s\'", Yap_tokRep(LOCAL_tokptr)); + syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr)); FAIL; } @@ -960,7 +961,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { TRY3( func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 2); if (func == NULL) { - syntax_msg("Heap Overflow"); + syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos); FAIL; } NextToken; { @@ -970,7 +971,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { t = Yap_MkApplTerm(func, 2, args); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } }, @@ -983,13 +984,13 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { /* parse as posfix operator */ Functor func = Yap_MkFunctor((Atom)LOCAL_tokptr->TokInfo, 1); if (func == NULL) { - syntax_msg("Heap Overflow"); + syntax_msg("line %d: Heap Overflow",LOCAL_tokptr->TokPos); FAIL; } t = Yap_MkApplTerm(func, 1, &t); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } curprio = opprio; @@ -1008,7 +1009,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { t = Yap_MkApplTerm(FunctorComma, 2, args); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } curprio = 1000; @@ -1023,7 +1024,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { t = Yap_MkApplTerm(FunctorVBar, 2, args); /* check for possible overflow against local stack */ if (HR > ASP - 4096) { - syntax_msg("Stack Overflow"); + syntax_msg("line %d: Stack Overflow",LOCAL_tokptr->TokPos); FAIL; } curprio = opprio; @@ -1053,7 +1054,7 @@ static Term ParseTerm(int prio, JMPBUFF *FailBuff USES_REGS) { } } if (LOCAL_tokptr->Tok <= Ord(WString_tok)) { - syntax_msg("expected operator, got \'%s\'", Yap_tokRep(LOCAL_tokptr)); + syntax_msg("line %d: expected operator, got \'%s\'",LOCAL_tokptr->TokPos, Yap_tokRep(LOCAL_tokptr)); FAIL; } break; diff --git a/C/save.c b/C/save.c index 3817a9504..ef7713d02 100755 --- a/C/save.c +++ b/C/save.c @@ -1400,7 +1400,7 @@ commit_to_saved_state(char *s, CELL *Astate, CELL *ATrail, CELL *AStack, CELL *A LOCAL_PrologMode = BootMode; if (Yap_HeapBase) { if (falseGlobalPrologFlag( HALT_AFTER_CONSULT_FLAG ) && !silentMode( )) { - Yap_TrueFileName(s,LOCAL_FileNameBuf2, YAP_FILENAME_MAX); + Yap_AbsoluteFileInBuffer(s,LOCAL_FileNameBuf2, YAP_FILENAME_MAX, true); fprintf(stderr, "%% Restoring file %s\n", LOCAL_FileNameBuf2); } Yap_CloseStreams(TRUE); @@ -1442,7 +1442,7 @@ OpenRestore(char *inpf, char *YapLibDir, CELL *Astate, CELL *ATrail, CELL *AStac int mode; char fname[PATH_MAX+1]; - if (!Yap_trueFileName( inpf, YAP_STARTUP, YapLibDir, fname, true, YAP_SAVED_STATE, true, true)) + if (!Yap_AbsoluteFileInBuffer( inpf, fname, PATH_MAX, true)) return false; if (fname[0] && (mode = try_open(fname,Astate,ATrail,AStack,AHeap,streamp)) != FAIL_RESTORE) { diff --git a/C/scanner.c b/C/scanner.c index a9c55faa0..802675a90 100755 --- a/C/scanner.c +++ b/C/scanner.c @@ -1247,6 +1247,7 @@ const char *Yap_tokRep(TokEntry *tokptr) { return buf; case Var_tok: { VarEntry *varinfo = (VarEntry *)info; + varinfo->VarAdr = TermNil; return varinfo->VarRep; } case String_tok: diff --git a/C/text.c b/C/text.c index 8526fa811..c69550dca 100644 --- a/C/text.c +++ b/C/text.c @@ -650,7 +650,7 @@ write_atom( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng US switch (enc) { case ENC_ISO_UTF8: { unsigned char *s = s0, *lim = s + strnlen(s0, max); - wchar_t *buf = malloc(sizeof(wchar_t)*((lim+1)-s)), *ptr = buf; + wchar_t *buf = malloc(sizeof(wchar_t)*((lim+2)-s)), *ptr = buf; Atom at; while (*s && s < lim) {