From 98d9c42c42b7d572c6ec5f73a5182f8430ec34f1 Mon Sep 17 00:00:00 2001 From: vsc Date: Tue, 8 Oct 2002 05:00:36 +0000 Subject: [PATCH] fix error handling for second argument of number_codes and number_chars/2 git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@626 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/stdpreds.c | 29 ++++++++++++++++------------- C/tracer.c | 9 +++++---- pl/errors.yap | 5 ++++- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/C/stdpreds.c b/C/stdpreds.c index 4d38bd3f6..3378175c9 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -831,6 +831,18 @@ p_atom_split(void) return(unify_constant(ARG3,to1) && unify_constant(ARG4,to2)); } +static Term +gen_syntax_error(char *s) +{ + Term ts[6], ti[2]; + ti[0] = ARG1; + ti[1] = ARG2; + ts[0] = MkApplTerm(MkFunctor(LookupAtom(s),2),2,ti); + ts[1] = ts[4] = ts[5] = MkIntTerm(0); + ts[2] = MkAtomTerm(LookupAtom("number syntax")); + ts[3] = TermNil; + return(MkApplTerm(MkFunctor(LookupAtom("syntax_error"),6),6,ts)); +} static Int p_number_chars(void) @@ -893,10 +905,7 @@ p_number_chars(void) Error(INSTANTIATION_ERROR, t1, "number_chars/2"); return(FALSE); } - if (t == TermNil) { - return (FALSE); - } - if (!IsPairTerm(t)) { + if (!IsPairTerm(t) && t != TermNil) { Error(TYPE_ERROR_LIST, t, "number_chars/2"); return(FALSE); } @@ -959,7 +968,7 @@ p_number_chars(void) } *s++ = '\0'; if ((NewT = get_num(String)) == TermNil) { - Error(SYNTAX_ERROR, Deref(ARG2), "number_chars/2", String); + Error(SYNTAX_ERROR, gen_syntax_error("number_chars"), "while scanning %s", String); return (FALSE); } return (unify(ARG1, NewT)); @@ -1013,9 +1022,6 @@ p_number_atom(void) Error(INSTANTIATION_ERROR, t, "number_chars/2"); return(FALSE); } - if (t == TermNil) { - return (FALSE); - } if (!IsAtomTerm(t)) { Error(TYPE_ERROR_LIST, t, "number_atom/2"); return(FALSE); @@ -1071,10 +1077,7 @@ p_number_codes(void) if (IsVarTerm(t)) { Error(INSTANTIATION_ERROR, t, "number_codes/2"); } - if (t == TermNil) { - return (FALSE); - } - if (!IsPairTerm(t)) { + if (!IsPairTerm(t) && t != TermNil) { Error(TYPE_ERROR_LIST, t, "number_codes/2"); return(FALSE); } @@ -1107,7 +1110,7 @@ p_number_codes(void) } *s++ = '\0'; if ((NewT = get_num(String)) == TermNil) { - Error(SYNTAX_ERROR, Deref(ARG2), "number_chars/2", String); + Error(SYNTAX_ERROR, gen_syntax_error("number_codes"), "while scanning %s", String); return (FALSE); } return (unify(ARG1, NewT)); diff --git a/C/tracer.c b/C/tracer.c index c3a3267d5..bdbcee1ec 100644 --- a/C/tracer.c +++ b/C/tracer.c @@ -112,10 +112,11 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) /* extern int gc_calls; */ vsc_count++; - /* if (vsc_count < 123808900) return; */ - /* if (vsc_count == 59) { - printf("Here I go\n"); - } */ + /* if (vsc_count < 24200) return; */ + /* if (vsc_count == 24340) { + printf("Here I go\n"); + } + */ /* if (vsc_count > 500000) exit(0); */ /* if (gc_calls < 1) return;*/ #if defined(__GNUC__) diff --git a/pl/errors.yap b/pl/errors.yap index e2dd1a4d4..fbe1b6dc0 100644 --- a/pl/errors.yap +++ b/pl/errors.yap @@ -160,6 +160,7 @@ print_message(Level, Mss) :- '$beautify_hidden_goal'('$yes_no',_,_,_,_,[]) :- !. '$beautify_hidden_goal'('$do_yes_no',_,_,_,_,[]) :- !. '$beautify_hidden_goal'('$query',_,_,_,_,[]) :- !. +'$beautify_hidden_goal'('$enter_top_level',_,_,_,_,[]) :- !. % The user should never know these exist. '$beautify_hidden_goal'('$csult',_,prolog,ClNo,Gs,NGs) :- !, '$preprocess_stack'(Gs, NGs). @@ -293,7 +294,7 @@ print_message(Level, Mss) :- '$format'(user_error,"[ DOMAIN ERROR- ~w: number ~w not newline ]~n", [Where,N]). '$output_error_message'(domain_error(not_zero,N), Where) :- - '$format'(user_error,"[ DOMAIN ERROR- ~w: number ~w not zero ]~n", + '$format'(user_error,"[ DOMAIN ERROR- ~w: ~w is not allowed in the domain ]~n", [Where,N]). '$output_error_message'(domain_error(operator_priority,N), Where) :- '$format'(user_error,"[ DOMAIN ERROR- ~w: ~w invalid operator priority ]~n", @@ -439,6 +440,8 @@ print_message(Level, Mss) :- '$output_error_message'(representation_error(max_arity), Where) :- '$format'(user_error,"[ REPRESENTATION ERROR- ~w: number too big ]~n", [Where]). +'$output_error_message'(syntax_error(G,0,Msg,[],0,0), Where) :- !, + '$format'(user_error,"[ SYNTAX ERROR in ~w: ~a ]~n",[G,Msg]). '$output_error_message'(syntax_error(_,Position,_,Term,Pos,Start), Where) :- '$format'(user_error,"[ ~w ",[Where]), '$dump_syntax_error_line'(Start,Position),