|
From: Vitor S. C. <vs...@us...> - 2008-06-12 10:55:46
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv20804/C Modified Files: iopreds.c stdpreds.c Log Message: fix syntax error messages Index: iopreds.c =================================================================== RCS file: /cvsroot/yap/C/iopreds.c,v retrieving revision 1.180 retrieving revision 1.181 diff -u -r1.180 -r1.181 --- iopreds.c 5 Jun 2008 16:24:07 -0000 1.180 +++ iopreds.c 12 Jun 2008 10:55:52 -0000 1.181 @@ -1592,7 +1592,7 @@ s->stream_getc = PlGetc; s->stream_gets = PlGetsFunc(); } - return(post_process_read_char(ch, s)); + return(ch); } /* give back 0376+ch */ @@ -3590,7 +3590,7 @@ } static Term -syntax_error (TokEntry * tokptr) +syntax_error (TokEntry * tokptr, int sno) { Term info; int count = 0, out = 0; @@ -3687,6 +3687,7 @@ tf[0] = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("read"),1),1,&ARG2); { Term t[3]; + t[0] = MkIntegerTerm(start); t[1] = MkIntegerTerm(err); t[2] = MkIntegerTerm(end); @@ -3695,7 +3696,8 @@ tf[2] = MkAtomTerm(Yap_LookupAtom("\n<==== HERE ====>\n")); tf[4] = MkIntegerTerm(out); tf[5] = MkIntegerTerm(err); - return(Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("syntax_error"),6),6,tf)); + tf[6] = StreamName(sno); + return(Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("syntax_error"),7),7,tf)); } Int @@ -3932,7 +3934,7 @@ /* try again */ goto repeat_cycle; } else { - Term terr = syntax_error(tokstart); + Term terr = syntax_error(tokstart, inp_stream); if (Yap_ErrorMessage == NULL) Yap_ErrorMessage = "SYNTAX ERROR"; @@ -4284,7 +4286,7 @@ Stream[sno].stream_gets = PlGetsFunc(); /* reset the counters */ Stream[sno].linepos = 0; - Stream[sno].linecount = 0; + Stream[sno].linecount = 1; Stream[sno].charcount = 0; } UNLOCK(Stream[sno].streamlock); @@ -5938,33 +5940,40 @@ if (sno < 0) return FALSE; + UNLOCK(Stream[sno].streamlock); TR_before_parse = TR; tokstart = Yap_tokptr = Yap_toktide = Yap_tokenizer(sno); - /* cannot actually use CloseStream, because we didn't allocate the buffer */ - Stream[sno].status = Free_Stream_f; if (tokstart == NIL && tokstart->Tok == Ord (eot_tok)) { if (tp) { *tp = MkAtomTerm(Yap_LookupAtom("end of file found before end of term")); } Yap_clean_tokenizer(tokstart, Yap_VarTable, Yap_AnonVarTable); + /* cannot actually use CloseStream, because we didn't allocate the buffer */ + Stream[sno].status = Free_Stream_f; return FALSE; } else if (Yap_ErrorMessage) { if (tp) { *tp = MkAtomTerm(Yap_LookupAtom(Yap_ErrorMessage)); } Yap_clean_tokenizer(tokstart, Yap_VarTable, Yap_AnonVarTable); + /* cannot actually use CloseStream, because we didn't allocate the buffer */ + Stream[sno].status = Free_Stream_f; return FALSE; } t = Yap_Parse(); TR = TR_before_parse; if (Yap_ErrorMessage) { if (tp) { - *tp = syntax_error(tokstart); + *tp = syntax_error(tokstart, sno); } Yap_clean_tokenizer(tokstart, Yap_VarTable, Yap_AnonVarTable); + /* cannot actually use CloseStream, because we didn't allocate the buffer */ + Stream[sno].status = Free_Stream_f; return FALSE; } Yap_clean_tokenizer(tokstart, Yap_VarTable, Yap_AnonVarTable); + /* cannot actually use CloseStream, because we didn't allocate the buffer */ + Stream[sno].status = Free_Stream_f; return t; } Index: stdpreds.c =================================================================== RCS file: /cvsroot/yap/C/stdpreds.c,v retrieving revision 1.130 retrieving revision 1.131 diff -u -r1.130 -r1.131 --- stdpreds.c 6 Apr 2008 11:53:02 -0000 1.130 +++ stdpreds.c 12 Jun 2008 10:55:52 -0000 1.131 @@ -13,6 +13,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.131 2008/06/12 10:55:52 vsc +* fix syntax error messages +* * Revision 1.130 2008/04/06 11:53:02 vsc * fix some restore bugs * @@ -1846,16 +1849,17 @@ } static Term -gen_syntax_error(char *s) +gen_syntax_error(Atom InpAtom, char *s) { Term ts[6], ti[2]; ti[0] = ARG1; ti[1] = ARG2; ts[0] = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom(s),2),2,ti); ts[1] = ts[4] = ts[5] = MkIntTerm(0); - ts[2] = MkAtomTerm(Yap_LookupAtom("number syntax")); + ts[2] = MkAtomTerm(Yap_LookupAtom("expected number syntax")); ts[3] = TermNil; - return(Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("syntax_error"),6),6,ts)); + ts[6] = MkAtomTerm(InpAtom); + return(Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("syntax_error"),7),7,ts)); } static Int @@ -1994,7 +1998,7 @@ } *s++ = '\0'; if ((NewT = get_num(String)) == TermNil) { - Yap_Error(SYNTAX_ERROR, gen_syntax_error("number_chars"), "while scanning %s", String); + Yap_Error(SYNTAX_ERROR, gen_syntax_error(Yap_LookupAtom(String), "number_chars"), "while scanning %s", String); return (FALSE); } return (Yap_unify(ARG1, NewT)); @@ -2063,7 +2067,7 @@ } s = RepAtom(AtomOfTerm(t))->StrOfAE; if ((NewT = get_num(s)) == TermNil) { - Yap_Error(SYNTAX_ERROR, gen_syntax_error("number_atom"), "while scanning %s", s); + Yap_Error(SYNTAX_ERROR, gen_syntax_error(Yap_LookupAtom(String), "number_atom"), "while scanning %s", s); return (FALSE); } return (Yap_unify(ARG1, NewT)); @@ -2158,7 +2162,7 @@ } *s++ = '\0'; if ((NewT = get_num(String)) == TermNil) { - Yap_Error(SYNTAX_ERROR, gen_syntax_error("number_codes"), "while scanning %s", String); + Yap_Error(SYNTAX_ERROR, gen_syntax_error(Yap_LookupAtom(String), "number_codes"), "while scanning %s", String); return (FALSE); } return (Yap_unify(ARG1, NewT)); @@ -2220,12 +2224,12 @@ } at = AtomOfTerm(t); if (IsWideAtom(at)) { - Yap_Error(SYNTAX_ERROR, gen_syntax_error("number_codes"), "while scanning %S", RepAtom(at)->WStrOfAE); + Yap_Error(SYNTAX_ERROR, gen_syntax_error(at, "number_codes"), "while scanning %S", RepAtom(at)->WStrOfAE); return FALSE; } s = RepAtom(at)->StrOfAE; /* alloc temp space on Trail */ if ((NewT = get_num(s)) == TermNil) { - Yap_Error(SYNTAX_ERROR, gen_syntax_error("atom_number"), "while scanning %s", s); + Yap_Error(SYNTAX_ERROR, gen_syntax_error(at, "atom_number"), "while scanning %s", s); return FALSE; } return Yap_unify(ARG2, NewT); |