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
This commit is contained in:
		
							
								
								
									
										29
									
								
								C/stdpreds.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								C/stdpreds.c
									
									
									
									
									
								
							@@ -831,6 +831,18 @@ p_atom_split(void)
 | 
				
			|||||||
  return(unify_constant(ARG3,to1) && unify_constant(ARG4,to2));
 | 
					  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 
 | 
					static Int 
 | 
				
			||||||
p_number_chars(void)
 | 
					p_number_chars(void)
 | 
				
			||||||
@@ -893,10 +905,7 @@ p_number_chars(void)
 | 
				
			|||||||
    Error(INSTANTIATION_ERROR, t1, "number_chars/2");
 | 
					    Error(INSTANTIATION_ERROR, t1, "number_chars/2");
 | 
				
			||||||
    return(FALSE);		
 | 
					    return(FALSE);		
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (t == TermNil) {
 | 
					  if (!IsPairTerm(t) && t != TermNil) {
 | 
				
			||||||
    return (FALSE);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (!IsPairTerm(t)) {
 | 
					 | 
				
			||||||
    Error(TYPE_ERROR_LIST, t, "number_chars/2");
 | 
					    Error(TYPE_ERROR_LIST, t, "number_chars/2");
 | 
				
			||||||
    return(FALSE);		
 | 
					    return(FALSE);		
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -959,7 +968,7 @@ p_number_chars(void)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  *s++ = '\0';
 | 
					  *s++ = '\0';
 | 
				
			||||||
  if ((NewT = get_num(String)) == TermNil) {
 | 
					  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 (FALSE);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return (unify(ARG1, NewT));
 | 
					  return (unify(ARG1, NewT));
 | 
				
			||||||
@@ -1013,9 +1022,6 @@ p_number_atom(void)
 | 
				
			|||||||
      Error(INSTANTIATION_ERROR, t, "number_chars/2");
 | 
					      Error(INSTANTIATION_ERROR, t, "number_chars/2");
 | 
				
			||||||
      return(FALSE);		
 | 
					      return(FALSE);		
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (t == TermNil) {
 | 
					 | 
				
			||||||
    return (FALSE);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (!IsAtomTerm(t)) {
 | 
					  if (!IsAtomTerm(t)) {
 | 
				
			||||||
    Error(TYPE_ERROR_LIST, t, "number_atom/2");
 | 
					    Error(TYPE_ERROR_LIST, t, "number_atom/2");
 | 
				
			||||||
    return(FALSE);		
 | 
					    return(FALSE);		
 | 
				
			||||||
@@ -1071,10 +1077,7 @@ p_number_codes(void)
 | 
				
			|||||||
  if (IsVarTerm(t)) {
 | 
					  if (IsVarTerm(t)) {
 | 
				
			||||||
    Error(INSTANTIATION_ERROR, t, "number_codes/2");
 | 
					    Error(INSTANTIATION_ERROR, t, "number_codes/2");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if (t == TermNil) {
 | 
					  if (!IsPairTerm(t) && t != TermNil) {
 | 
				
			||||||
    return (FALSE);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (!IsPairTerm(t)) {
 | 
					 | 
				
			||||||
    Error(TYPE_ERROR_LIST, t, "number_codes/2");
 | 
					    Error(TYPE_ERROR_LIST, t, "number_codes/2");
 | 
				
			||||||
    return(FALSE);		
 | 
					    return(FALSE);		
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@@ -1107,7 +1110,7 @@ p_number_codes(void)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  *s++ = '\0';
 | 
					  *s++ = '\0';
 | 
				
			||||||
  if ((NewT = get_num(String)) == TermNil) {
 | 
					  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 (FALSE);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return (unify(ARG1, NewT));
 | 
					  return (unify(ARG1, NewT));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,10 +112,11 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
 | 
				
			|||||||
  /*  extern int gc_calls; */
 | 
					  /*  extern int gc_calls; */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  vsc_count++;
 | 
					  vsc_count++;
 | 
				
			||||||
  /*  if (vsc_count < 123808900) return; */
 | 
					  /* if (vsc_count < 24200) return; */
 | 
				
			||||||
  /* if (vsc_count == 59) {
 | 
					  /* if (vsc_count == 24340) {
 | 
				
			||||||
     printf("Here I go\n");
 | 
					     printf("Here I go\n");
 | 
				
			||||||
    } */
 | 
					     } 
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
  /* if (vsc_count > 500000) exit(0); */
 | 
					  /* if (vsc_count > 500000) exit(0); */
 | 
				
			||||||
  /* if (gc_calls < 1) return;*/
 | 
					  /* if (gc_calls < 1) return;*/
 | 
				
			||||||
#if defined(__GNUC__)
 | 
					#if defined(__GNUC__)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -160,6 +160,7 @@ print_message(Level, Mss) :-
 | 
				
			|||||||
'$beautify_hidden_goal'('$yes_no',_,_,_,_,[]) :- !.
 | 
					'$beautify_hidden_goal'('$yes_no',_,_,_,_,[]) :- !.
 | 
				
			||||||
'$beautify_hidden_goal'('$do_yes_no',_,_,_,_,[]) :- !.
 | 
					'$beautify_hidden_goal'('$do_yes_no',_,_,_,_,[]) :- !.
 | 
				
			||||||
'$beautify_hidden_goal'('$query',_,_,_,_,[]) :- !.
 | 
					'$beautify_hidden_goal'('$query',_,_,_,_,[]) :- !.
 | 
				
			||||||
 | 
					'$beautify_hidden_goal'('$enter_top_level',_,_,_,_,[]) :- !.
 | 
				
			||||||
% The user should never know these exist.
 | 
					% The user should never know these exist.
 | 
				
			||||||
'$beautify_hidden_goal'('$csult',_,prolog,ClNo,Gs,NGs) :- !,
 | 
					'$beautify_hidden_goal'('$csult',_,prolog,ClNo,Gs,NGs) :- !,
 | 
				
			||||||
	'$preprocess_stack'(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",
 | 
						'$format'(user_error,"[ DOMAIN ERROR- ~w: number ~w not newline ]~n",
 | 
				
			||||||
	[Where,N]).
 | 
						[Where,N]).
 | 
				
			||||||
'$output_error_message'(domain_error(not_zero,N), Where) :-
 | 
					'$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]).
 | 
						[Where,N]).
 | 
				
			||||||
'$output_error_message'(domain_error(operator_priority,N), Where) :-
 | 
					'$output_error_message'(domain_error(operator_priority,N), Where) :-
 | 
				
			||||||
	'$format'(user_error,"[ DOMAIN ERROR- ~w: ~w invalid operator priority ]~n",
 | 
						'$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) :-
 | 
					'$output_error_message'(representation_error(max_arity), Where) :-
 | 
				
			||||||
	'$format'(user_error,"[ REPRESENTATION ERROR- ~w: number too big ]~n",
 | 
						'$format'(user_error,"[ REPRESENTATION ERROR- ~w: number too big ]~n",
 | 
				
			||||||
	[Where]).
 | 
						[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) :-
 | 
					'$output_error_message'(syntax_error(_,Position,_,Term,Pos,Start), Where) :-
 | 
				
			||||||
	'$format'(user_error,"[ ~w ",[Where]),
 | 
						'$format'(user_error,"[ ~w ",[Where]),
 | 
				
			||||||
	'$dump_syntax_error_line'(Start,Position),
 | 
						'$dump_syntax_error_line'(Start,Position),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user