Jeroen Demeyer on Thu, 01 Nov 2007 15:26:35 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Patch: user warnings in GP |
Note: the file 'warning' should go in src/functions/programming
Index: src/functions/programming/error =================================================================== RCS file: /home/cvs/pari/src/functions/programming/error,v retrieving revision 1.7 diff -u -r1.7 error --- src/functions/programming/error 31 Mar 2007 13:49:48 -0000 1.7 +++ src/functions/programming/error 1 Nov 2007 14:17:44 -0000 @@ -14,7 +14,7 @@ Prototype: vs* Help: error({str}*): abort script with error message str Description: - (?gen,...):void pari_err(talker, "${2 format_string}"${2 format_args}) + (?gen,...):void pari_err(user, "${2 format_string}"${2 format_args}) Doc: outputs its argument list (each of them interpreted as a string), then interrupts the running \kbd{gp} program, returning to the input prompt. For instance Index: src/headers/paridecl.h =================================================================== RCS file: /home/cvs/pari/src/headers/paridecl.h,v retrieving revision 1.723 diff -u -r1.723 paridecl.h --- src/headers/paridecl.h 30 Oct 2007 23:52:17 -0000 1.723 +++ src/headers/paridecl.h 1 Nov 2007 14:17:44 -0000 @@ -1060,6 +1060,7 @@ void bruterr(GEN x,char format,long dec); void dbgGEN(GEN x, long nb); void error0(GEN g); +void warn0(GEN g); void etatpile(void); char* expand_tilde(const char *s); int file_is_binary(FILE *f); Index: src/language/anal.h =================================================================== RCS file: /home/cvs/pari/src/language/anal.h,v retrieving revision 1.103 diff -u -r1.103 anal.h --- src/language/anal.h 30 Oct 2007 11:33:51 -0000 1.103 +++ src/language/anal.h 1 Nov 2007 14:17:44 -0000 @@ -133,6 +133,7 @@ enum { f_RAW, f_PRETTYMAT, f_PRETTYOLD, f_PRETTY, f_TEX }; void error0(GEN g); +void warn0(GEN g); void gpwritebin(const char *s, GEN x); void print (GEN g); void print0(GEN g, long flag); Index: src/language/es.c =================================================================== RCS file: /home/cvs/pari/src/language/es.c,v retrieving revision 1.265 diff -u -r1.265 es.c --- src/language/es.c 30 Oct 2007 11:33:51 -0000 1.265 +++ src/language/es.c 1 Nov 2007 14:17:44 -0000 @@ -3480,6 +3480,8 @@ void error0(GEN g) { pari_err(user, g); } +void warn0(GEN g) { pari_warn(user, g); } + static char * wr_check(const char *s) { char *t = expand_tilde(s); Index: src/language/init.c =================================================================== RCS file: /home/cvs/pari/src/language/init.c,v retrieving revision 1.370 diff -u -r1.370 init.c --- src/language/init.c 30 Oct 2007 11:33:51 -0000 1.370 +++ src/language/init.c 1 Nov 2007 14:17:44 -0000 @@ -976,25 +976,36 @@ pariflush(); pariOut = pariErr; pariflush(); term_color(c_ERR); - if (gp_function_name) - pariprintf(" *** %s: %s", gp_function_name, errmessage[numerr]); + if (numerr == user) + { + GEN g = va_arg(ap, GEN); + pariprintf(" ### user warning: "); + print0(g, f_RAW); + pariputs("\n"); + } else - pariprintf(" *** %s", errmessage[numerr]); - switch (numerr) { - case warnmem: case warner: - pariputc(' '); ch1=va_arg(ap, char*); - vpariputs(ch1,ap); pariputs(".\n"); - break; - - case warnprec: - vpariputs(" in %s; new prec = %ld\n",ap); - break; + if (gp_function_name) + pariprintf(" *** %s: %s", gp_function_name, errmessage[numerr]); + else + pariprintf(" *** %s", errmessage[numerr]); - case warnfile: - ch1=va_arg(ap, char*); - pariprintf(" %s: %s\n", ch1, va_arg(ap, char*)); - break; + switch (numerr) + { + case warnmem: case warner: + pariputc(' '); ch1=va_arg(ap, char*); + vpariputs(ch1,ap); pariputs(".\n"); + break; + + case warnprec: + vpariputs(" in %s; new prec = %ld\n",ap); + break; + + case warnfile: + ch1=va_arg(ap, char*); + pariprintf(" %s: %s\n", ch1, va_arg(ap, char*)); + break; + } } term_color(c_NONE); va_end(ap); pariOut = out;
Function: warning Section: programming/specific C-Name: warn0 Prototype: vs* Help: warning({str}*): display warning message str Description: (?gen,...):void pari_warn(user, "${2 format_string}"${2 format_args}) Doc: outputs the message ``user warning'' and the argument list (each of them interpreted as a string). If colors are enabled, this warning will be in a different color, making it easy to distinguish. \bprog warning(n, " is very large, this might take a while!") @eprog\noindent % \syn{NO}