From b48f1264b9736fb09303682fbc8a395d0c6011a6 Mon Sep 17 00:00:00 2001 From: vsc Date: Mon, 17 Jun 2002 15:28:01 +0000 Subject: [PATCH] fix report on initial and token line for parser. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@540 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/cdmgr.c | 4 ++-- C/init.c | 6 ------ C/iopreds.c | 44 ++++++++++++++++++------------------------ C/scanner.c | 11 +---------- H/iopreds.h | 5 +++++ H/yapio.h | 2 +- m4/Yap.h.m4 | 7 +------ pl/boot.yap | 8 ++++---- pl/yio.yap | 55 +++++++++++++++++++++++++---------------------------- 9 files changed, 59 insertions(+), 83 deletions(-) diff --git a/C/cdmgr.c b/C/cdmgr.c index 9b1a9a7dc..39d9e727a 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -1074,7 +1074,7 @@ p_compile(void) if (ErrorMessage) { if (IntOfTerm(t1) & 4) { Error(Error_TYPE, Error_Term, - "in line %d, %s", StartLine, ErrorMessage); + "in line %d, %s", FirstLineInParse(), ErrorMessage); } else Error(Error_TYPE, Error_Term, ErrorMessage); return (FALSE); @@ -1111,7 +1111,7 @@ p_compile_dynamic(void) } if (ErrorMessage) { if (IntOfTerm(t1) & 4) { - Error(Error_TYPE, Error_Term, "line %d, %s", StartLine, ErrorMessage); + Error(Error_TYPE, Error_Term, "line %d, %s", FirstLineInParse(), ErrorMessage); } else Error(Error_TYPE, Error_Term, ErrorMessage); return (FALSE); diff --git a/C/init.c b/C/init.c index 16ffc8909..f0d953224 100644 --- a/C/init.c +++ b/C/init.c @@ -110,12 +110,6 @@ char version_number[] = YAP_VERSION; int optimizer_on = TRUE; -/******************* the line for the current parse **********************/ - -int StartLine = 1; -int StartCh = 0; -int CurFileNo = 0; - int compile_mode = 0; /******************* intermediate buffers **********************/ diff --git a/C/iopreds.c b/C/iopreds.c index 45ea98ffd..dca03153e 100644 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -174,6 +174,8 @@ STATIC_PROTO (Int GetArgSizeFromChar, (Term *)); static int first_char; #endif +static int StartLine; + int YP_stdin = 0; int YP_stdout = 1; int YP_stderr = 2; @@ -1281,17 +1283,6 @@ PlUnGetc (int sno) } -#if EMACS -int -GetCurInpPos () -{ - if (Stream[c_input_stream].status & (Tty_Stream_f|Socket_Stream_f|InMemory_Stream_f)) - return (Stream[c_input_stream].charcount); - else - return (YP_ftell (Stream[c_input_stream].u.file.file)); -} -#endif /* EMACS */ - /* used by user-code to read characters from the current input stream */ int PlGetchar (void) @@ -2721,21 +2712,20 @@ syntax_error (TokEntry * tokptr) } tf[2] = MkAtomTerm(LookupAtom("\n<==== HERE ====>\n")); tf[4] = MkIntegerTerm(out); - tf[5] = MkIntegerTerm(StartLine); + tf[5] = MkIntegerTerm(err); return(MkApplTerm(MkFunctor(LookupAtom("syntax_error"),6),6,tf)); } -void +Int FirstLineInParse (void) { - StartLine = Stream[c_input_stream].linecount; - StartCh = Stream[c_input_stream].charcount; + return(StartLine); } static Int p_startline (void) { - return (unify_constant (ARG1, MkIntTerm (StartLine))); + return (unify_constant (ARG1, MkIntegerTerm (StartLine))); } static Int @@ -2834,7 +2824,7 @@ p_get_read_error_handler(void) static Int p_read (void) -{ /* '$read'(+Flag,?Term,?Vars,-Err) */ +{ /* '$read'(+Flag,?Term,?Vars,-Pos,-Err) */ Term t, v; TokEntry *tokstart, *fast_tokenizer (void); #if EMACS @@ -2876,7 +2866,9 @@ p_read (void) } else { /* restore TR */ TR = old_TR; - return (unify_constant (ARG2, MkAtomTerm (AtomEof))); + + return (unify(MkIntegerTerm(StartLine = Stream[c_input_stream].linecount),ARG4) && + unify_constant (ARG2, MkAtomTerm (AtomEof))); } } repeat_cycle: @@ -2910,7 +2902,8 @@ p_read (void) Term t[2]; t[0] = terr; t[1] = MkAtomTerm(LookupAtom(ErrorMessage)); - return(unify(ARG4,MkApplTerm(MkFunctor(LookupAtom("error"),2),2,t))); + return(unify(MkIntTerm(StartLine = tokstart->TokPos),ARG4) && + unify(ARG5,MkApplTerm(MkFunctor(LookupAtom("error"),2),2,t))); } } } else { @@ -2938,21 +2931,22 @@ p_read (void) old_H = H; } } - return(unify(t, ARG2) && unify (v, ARG3)); + return(unify(t, ARG2) && unify (v, ARG3) && + unify(MkIntTerm(StartLine = tokstart->TokPos),ARG4)); } else { TR = old_TR; - return(unify(t, ARG2)); + return(unify(t, ARG2) && unify(MkIntTerm(StartLine = tokstart->TokPos),ARG4)); } } static Int p_read2 (void) -{ /* '$read2'(+Flag,?Term,?Vars,-Err,+Stream) */ +{ /* '$read2'(+Flag,?Term,?Vars,-Pos,-Err,+Stream) */ int old_c_stream = c_input_stream; Int out; /* needs to change c_output_stream for write */ - c_input_stream = CheckStream (ARG5, Input_Stream_f, "read/3"); + c_input_stream = CheckStream (ARG6, Input_Stream_f, "read/3"); if (c_input_stream == -1) { c_input_stream = old_c_stream; return(FALSE); @@ -4866,8 +4860,8 @@ InitIOPreds(void) InitCPred ("$put_byte", 2, p_put_byte, SafePredFlag|SyncPredFlag); InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag); InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag); - InitCPred ("$read", 4, p_read, SyncPredFlag); - InitCPred ("$read", 5, p_read2, SyncPredFlag); + InitCPred ("$read", 5, p_read, SyncPredFlag); + InitCPred ("$read", 6, p_read2, SyncPredFlag); InitCPred ("$set_input", 1, p_set_input, SafePredFlag|SyncPredFlag); InitCPred ("$set_output", 1, p_set_output, SafePredFlag|SyncPredFlag); InitCPred ("$skip", 2, p_skip, SafePredFlag|SyncPredFlag); diff --git a/C/scanner.c b/C/scanner.c index 6cb1fc68b..c321f26ce 100644 --- a/C/scanner.c +++ b/C/scanner.c @@ -42,6 +42,7 @@ static char SccsId[] = "@(#)scanner.c 1.2"; #include "yapio.h" #include "alloc.h" #include "eval.h" +#include "iopreds.h" #if HAVE_STRING_H #include #endif @@ -515,9 +516,7 @@ token(void) charp = TokImage; while (chtype[ch] == BS) my_getch(); -#ifdef EMACS TokenPos = GetCurInpPos(); -#endif switch (chtype[ch]) { case CC: while (my_getch() != 10 && chtype[ch] != EF); @@ -826,7 +825,6 @@ tokenizer(int (*Nxtch) (int), int (*QuotedNxtch) (int)) my_getch(); while (chtype[ch] == BS) my_getch(); - FirstLineInParse(); do { t = (TokEntry *) AllocScannerMemory(sizeof(TokEntry)); @@ -898,7 +896,6 @@ fast_tokenizer(void) my_fgetch(); if (chtype[ch] == EF) return(NIL); - FirstLineInParse(); do { t = (TokEntry *) AllocScannerMemory(sizeof(TokEntry)); if (t == NULL) { @@ -925,16 +922,12 @@ fast_tokenizer(void) charp = TokImage = ((AtomEntry *) ( PreAllocCodeSpace()))->StrOfAE; while (chtype[ch] == BS) my_fgetch(); -#ifdef EMACS TokenPos = GetCurInpPos(); -#endif switch (chtype[ch]) { case CC: while (my_fgetch() != 10 && chtype[ch] != EF); if (chtype[ch] != EF) { my_fgetch(); - if (t == l) - FirstLineInParse(); ReleasePreAllocCodeSpace((CODEADDR)TokImage); goto get_tok; } @@ -1489,8 +1482,6 @@ fast_tokenizer(void) break; } my_fgetch(); - if (t == l) - FirstLineInParse(); ReleasePreAllocCodeSpace((CODEADDR)TokImage); goto get_tok; } diff --git a/H/iopreds.h b/H/iopreds.h index 1f6ddd527..d9a59f4b7 100644 --- a/H/iopreds.h +++ b/H/iopreds.h @@ -114,4 +114,9 @@ extern int YP_sockets_io; void STD_PROTO (InitStdStreams, (void)); +EXTERN inline int +GetCurInpPos (void) +{ + return (Stream[c_input_stream].linecount); +} diff --git a/H/yapio.h b/H/yapio.h index 05971b15c..efdc32cf1 100644 --- a/H/yapio.h +++ b/H/yapio.h @@ -270,7 +270,7 @@ TokEntry STD_PROTO(*fast_tokenizer,(void)); Term STD_PROTO(scan_num,(int (*)(int))); /* routines in iopreds.c */ -void STD_PROTO(FirstLineInParse,(void)); +Int STD_PROTO(FirstLineInParse,(void)); int STD_PROTO(CheckIOStream,(Term, char *)); int STD_PROTO(GetStreamFd,(int)); void STD_PROTO(CloseStream,(int)); diff --git a/m4/Yap.h.m4 b/m4/Yap.h.m4 index 8590d3edf..3e9d87400 100644 --- a/m4/Yap.h.m4 +++ b/m4/Yap.h.m4 @@ -10,7 +10,7 @@ * File: Yap.h.m4 * * mods: * * comments: main header file for YAP * -* version: $Id: Yap.h.m4,v 1.28 2002-06-01 01:46:06 vsc Exp $ * +* version: $Id: Yap.h.m4,v 1.29 2002-06-17 15:28:00 vsc Exp $ * *************************************************************************/ #include "config.h" @@ -746,11 +746,6 @@ typedef struct opcode_tab_entry { /******************* controlling the compiler ****************************/ extern int optimizer_on; -/******************* the line for the current parse **********************/ -extern int StartLine; -extern int StartCh; -extern int CurFileNo; - /********************* how to write a Prolog term ***********************/ /********* Prolog may be in several modes *******************************/ diff --git a/pl/boot.yap b/pl/boot.yap index 910683325..34eff7ba7 100644 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -121,8 +121,8 @@ read_sig. */ /* main execution loop */ -'$read_vars'(Stream,T,V) :- - '$read'(true,T,V,Err,Stream), +'$read_vars'(Stream,T,Pos,V) :- + '$read'(true,T,V,Pos,Err,Stream), (nonvar(Err) -> '$print_message'(error,Err), fail ; @@ -154,7 +154,7 @@ read_sig. '$enter_top_level' :- prompt(_,' ?- '), prompt(' | '), - '$read_vars'(user_input,Command,Varnames), + '$read_vars'(user_input,Command,_,Varnames), '$set_value'(spy_sl,0), '$set_value'(spy_fs,0), '$set_value'(spy_sp,0), @@ -998,7 +998,7 @@ break :- '$get_value'('$break',BL), NBL is BL+1, !. '$enter_command'(Stream,Status) :- - '$read_vars'(Stream,Command,Vars), + '$read_vars'(Stream,Command,_,Vars), '$command'(Command,Vars,Status). '$abort_loop'(Stream) :- diff --git a/pl/yio.yap b/pl/yio.yap index eb621abd0..efb32f8ae 100644 --- a/pl/yio.yap +++ b/pl/yio.yap @@ -316,7 +316,7 @@ told :- current_output(Stream), '$close'(Stream), set_output(user). /* Term IO */ read(T) :- - '$read'(false,T,_,Err), + '$read'(false,T,_,_,Err), (nonvar(Err) -> '$print_message'(error,Err), fail ; @@ -324,7 +324,7 @@ read(T) :- ). read(Stream,T) :- - '$read'(false,T,V,Err,Stream), + '$read'(false,T,V,_,Err,Stream), (nonvar(Err) -> '$print_message'(error,Err), fail ; @@ -334,52 +334,49 @@ read(Stream,T) :- read_term(T, Options) :- '$check_io_opts'(Options,read_term(T, Options)), current_input(S), - '$preprocess_read_terms_options'(Options,S), - '$read_vars'(S,T,VL), - '$postprocess_read_terms_options'(Options, T, VL). + '$preprocess_read_terms_options'(Options), + '$read_vars'(S,T,Pos,VL), + '$postprocess_read_terms_options'(Options, T, VL, Pos). read_term(Stream, T, Options) :- '$check_io_opts'(Options,read_term(T, Options)), - '$preprocess_read_terms_options'(Options, Stream), - '$read_vars'(Stream,T,VL), - '$postprocess_read_terms_options'(Options, T, VL). + '$preprocess_read_terms_options'(Options), + '$read_vars'(Stream,T,Pos,VL), + '$postprocess_read_terms_options'(Options, T, VL, Pos). % % support flags to read % -'$preprocess_read_terms_options'([], _). -'$preprocess_read_terms_options'([syntax_errors(NewVal)|L], Stream) :- !, +'$preprocess_read_terms_options'([]). +'$preprocess_read_terms_options'([syntax_errors(NewVal)|L]) :- !, '$get_read_error_handler'(OldVal), '$set_value'('$read_term_error_handler', OldVal), '$set_read_error_handler'(NewVal), - '$preprocess_read_terms_options'(L, Stream). -'$preprocess_read_terms_options'([term_position(Pos)|L], Stream) :- !, - '$show_stream_position'(Stream, '$stream_position'(_,Pos,_)), - '$preprocess_read_terms_options'(L, Stream). -'$preprocess_read_terms_options'([_|L], Stream) :- - '$preprocess_read_terms_options'(L, Stream). + '$preprocess_read_terms_options'(L). +'$preprocess_read_terms_options'([_|L]) :- + '$preprocess_read_terms_options'(L). -'$postprocess_read_terms_options'([], _, _). -'$postprocess_read_terms_options'([H|Tail], T, VL) :- !, - '$postprocess_read_terms_option'(H, T, VL), - '$postprocess_read_terms_options_list'(Tail, T, VL). +'$postprocess_read_terms_options'([], _, _, _). +'$postprocess_read_terms_options'([H|Tail], T, VL, Pos) :- !, + '$postprocess_read_terms_option'(H, T, VL, Pos), + '$postprocess_read_terms_options_list'(Tail, T, VL, Pos). -'$postprocess_read_terms_options_list'([], _, _). -'$postprocess_read_terms_options_list'([H|Tail], T, VL) :- - '$postprocess_read_terms_option'(H, T, VL), - '$postprocess_read_terms_options_list'(Tail, T, VL). +'$postprocess_read_terms_options_list'([], _, _, _). +'$postprocess_read_terms_options_list'([H|Tail], T, VL, Pos) :- + '$postprocess_read_terms_option'(H, T, VL, Pos), + '$postprocess_read_terms_options_list'(Tail, T, VL, Pos). -'$postprocess_read_terms_option'(syntax_errors(_), _, _) :- +'$postprocess_read_terms_option'(syntax_errors(_), _, _, _) :- '$get_value'('$read_term_error_handler', OldVal), '$set_read_error_handler'(OldVal). -'$postprocess_read_terms_option'(variable_names(Vars), _, VL) :- +'$postprocess_read_terms_option'(variable_names(Vars), _, VL, _) :- '$read_term_non_anonymous'(VL, Vars). -'$postprocess_read_terms_option'(singletons(Val), T, VL) :- +'$postprocess_read_terms_option'(singletons(Val), T, VL, _) :- '$singletons_in_term'(T, Val1), '$fetch_singleton_names'(Val1,VL,Val). -'$postprocess_read_terms_option'(variables(Val), T, _) :- +'$postprocess_read_terms_option'(variables(Val), T, _, _) :- '$variables_in_term'(T, [], Val). -'$postprocess_read_terms_option'(term_position(_), _, _). +'$postprocess_read_terms_option'(term_position(Pos), _, _, Pos). %'$postprocess_read_terms_option'(cycles(Val), _, _). '$read_term_non_anonymous'([], []).