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
This commit is contained in:
parent
804f7ecebc
commit
b48f1264b9
@ -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);
|
||||
|
6
C/init.c
6
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 **********************/
|
||||
|
44
C/iopreds.c
44
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);
|
||||
|
11
C/scanner.c
11
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 <string.h>
|
||||
#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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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 *******************************/
|
||||
|
@ -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) :-
|
||||
|
55
pl/yio.yap
55
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'([], []).
|
||||
|
Reference in New Issue
Block a user