]> granicus.if.org Git - yasm/commitdiff
Split error and warning handlers into notify and output functions.
authorPeter Johnson <peter@tortall.net>
Tue, 22 May 2001 20:44:32 +0000 (20:44 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 22 May 2001 20:44:32 +0000 (20:44 -0000)
Paired with changes in bison.y.in, this will make sure only one error
and/or warning is output for each line.

svn path=/trunk/yasm/; revision=35

include/errwarn.h
libyasm/errwarn.c
libyasm/errwarn.h
src/errwarn.c
src/errwarn.h

index ffb0eccad7f3f18271566ab45979655a0507f548..1c5fc8fa7965f0c954f0ca689e6cdd557665ca8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
  * Error and warning reporting and related functions header file.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -32,21 +32,27 @@ typedef enum {
 void Fatal(fatal_num);
 
 typedef enum {
-    ERR_UNKNOWN = 0,
+    ERR_NONE = 0,
     ERR_PARSER,
     ERR_MISSING,
     ERR_MISSING_ARG,
-    ERR_INVALID_ARG
+    ERR_INVALID_ARG,
+    ERR_INVALID_EA,
+    ERR_INVALID_LINE,
+    ERR_EXP_SYNTAX
 } err_num;
 
 void Error(err_num, char *, ...);
 
 typedef enum {
-    WARN_UNKNOWN = 0,
+    WARN_NONE = 0,
     WARN_UNREC_CHAR,
     WARN_VALUE_EXCEEDS_BOUNDS
 } warn_num;
 
 void Warning(warn_num, char *, ...);
 
+void OutputError(void);
+void OutputWarning(void);
+
 #endif
index a7ab705200b31244a82842d21e8f49d0d1179acd..136d2133fcca10e4fd23cac1b7258a0815d9c8fa 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.c,v 1.3 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.c,v 1.4 2001/05/22 20:44:32 peter Exp $
  * Error and warning reporting and related functions.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -36,19 +36,29 @@ static char *fatal_msgs[] = {
 };
 
 static char *err_msgs[] = {
-    "unknown error",
+    "",
     "parser error: %s",
     "missing '%1'",
     "missing argument to %s",
-    "invalid argument to %s"
+    "invalid argument to %s",
+    "invalid effective address",
+    "label or instruction expected at start of line",
+    "expression syntax error"
 };
 
 static char *warn_msgs[] = {
-    "unknown",
+    "",
     "ignoring unrecognized character '%s'",
     "%s value exceeds bounds"
 };
 
+/* hate to define these as static buffers; better solution would be to use
+ * vasprintf() to dynamically allocate, but that's not ANSI C */
+static char last_err[1024];
+static char last_warn[1024];
+static err_num last_err_num = ERR_NONE;
+static warn_num last_warn_num = WARN_NONE;
+
 /* conv_unprint: convert a possibly unprintable character into a printable
  * string, using standard cat(1) convention for unprintable characters. */
 static char unprint[5];
@@ -129,13 +139,16 @@ void Error(err_num num, char *argtypes, ...)
     va_list ap;
     char *printf_str;
 
+    if((last_err_num != ERR_NONE) && (last_err_num != ERR_PARSER))
+       return;
+
+    last_err_num = num;
+
     printf_str = process_argtypes(err_msgs[num], argtypes);
 
-    fprintf(stderr, "filename:%u: ", line_number);
     va_start(ap, argtypes);
-    vfprintf(stderr, printf_str, ap);
+    vsprintf(last_err, printf_str, ap);
     va_end(ap);
-    fprintf(stderr, "\n");
 
     free(printf_str);
 
@@ -147,16 +160,33 @@ void Warning(warn_num num, char *argtypes, ...)
     va_list ap;
     char *printf_str;
 
+    if(last_warn_num != WARN_NONE)
+       return;
+
+    last_warn_num = num;
+
     printf_str = process_argtypes(warn_msgs[num], argtypes);
 
-    fprintf(stderr, "filename:%u: warning: ", line_number);
     va_start(ap, argtypes);
-    vfprintf(stderr, printf_str, ap);
+    vsprintf(last_warn, printf_str, ap);
     va_end(ap);
-    fprintf(stderr, "\n");
 
     free(printf_str);
 
     warning_count++;
 }
 
+void OutputError(void)
+{
+    if(last_err_num != ERR_NONE)
+       fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+    last_err_num = ERR_NONE;
+}
+
+void OutputWarning(void)
+{
+    if(last_warn_num != WARN_NONE)
+       fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+    last_warn_num = WARN_NONE;
+}
+
index ffb0eccad7f3f18271566ab45979655a0507f548..1c5fc8fa7965f0c954f0ca689e6cdd557665ca8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
  * Error and warning reporting and related functions header file.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -32,21 +32,27 @@ typedef enum {
 void Fatal(fatal_num);
 
 typedef enum {
-    ERR_UNKNOWN = 0,
+    ERR_NONE = 0,
     ERR_PARSER,
     ERR_MISSING,
     ERR_MISSING_ARG,
-    ERR_INVALID_ARG
+    ERR_INVALID_ARG,
+    ERR_INVALID_EA,
+    ERR_INVALID_LINE,
+    ERR_EXP_SYNTAX
 } err_num;
 
 void Error(err_num, char *, ...);
 
 typedef enum {
-    WARN_UNKNOWN = 0,
+    WARN_NONE = 0,
     WARN_UNREC_CHAR,
     WARN_VALUE_EXCEEDS_BOUNDS
 } warn_num;
 
 void Warning(warn_num, char *, ...);
 
+void OutputError(void);
+void OutputWarning(void);
+
 #endif
index a7ab705200b31244a82842d21e8f49d0d1179acd..136d2133fcca10e4fd23cac1b7258a0815d9c8fa 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.c,v 1.3 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.c,v 1.4 2001/05/22 20:44:32 peter Exp $
  * Error and warning reporting and related functions.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -36,19 +36,29 @@ static char *fatal_msgs[] = {
 };
 
 static char *err_msgs[] = {
-    "unknown error",
+    "",
     "parser error: %s",
     "missing '%1'",
     "missing argument to %s",
-    "invalid argument to %s"
+    "invalid argument to %s",
+    "invalid effective address",
+    "label or instruction expected at start of line",
+    "expression syntax error"
 };
 
 static char *warn_msgs[] = {
-    "unknown",
+    "",
     "ignoring unrecognized character '%s'",
     "%s value exceeds bounds"
 };
 
+/* hate to define these as static buffers; better solution would be to use
+ * vasprintf() to dynamically allocate, but that's not ANSI C */
+static char last_err[1024];
+static char last_warn[1024];
+static err_num last_err_num = ERR_NONE;
+static warn_num last_warn_num = WARN_NONE;
+
 /* conv_unprint: convert a possibly unprintable character into a printable
  * string, using standard cat(1) convention for unprintable characters. */
 static char unprint[5];
@@ -129,13 +139,16 @@ void Error(err_num num, char *argtypes, ...)
     va_list ap;
     char *printf_str;
 
+    if((last_err_num != ERR_NONE) && (last_err_num != ERR_PARSER))
+       return;
+
+    last_err_num = num;
+
     printf_str = process_argtypes(err_msgs[num], argtypes);
 
-    fprintf(stderr, "filename:%u: ", line_number);
     va_start(ap, argtypes);
-    vfprintf(stderr, printf_str, ap);
+    vsprintf(last_err, printf_str, ap);
     va_end(ap);
-    fprintf(stderr, "\n");
 
     free(printf_str);
 
@@ -147,16 +160,33 @@ void Warning(warn_num num, char *argtypes, ...)
     va_list ap;
     char *printf_str;
 
+    if(last_warn_num != WARN_NONE)
+       return;
+
+    last_warn_num = num;
+
     printf_str = process_argtypes(warn_msgs[num], argtypes);
 
-    fprintf(stderr, "filename:%u: warning: ", line_number);
     va_start(ap, argtypes);
-    vfprintf(stderr, printf_str, ap);
+    vsprintf(last_warn, printf_str, ap);
     va_end(ap);
-    fprintf(stderr, "\n");
 
     free(printf_str);
 
     warning_count++;
 }
 
+void OutputError(void)
+{
+    if(last_err_num != ERR_NONE)
+       fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+    last_err_num = ERR_NONE;
+}
+
+void OutputWarning(void)
+{
+    if(last_warn_num != WARN_NONE)
+       fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+    last_warn_num = WARN_NONE;
+}
+
index ffb0eccad7f3f18271566ab45979655a0507f548..1c5fc8fa7965f0c954f0ca689e6cdd557665ca8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.h,v 1.2 2001/05/21 20:14:58 peter Exp $
+/* $Id: errwarn.h,v 1.3 2001/05/22 20:44:32 peter Exp $
  * Error and warning reporting and related functions header file.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -32,21 +32,27 @@ typedef enum {
 void Fatal(fatal_num);
 
 typedef enum {
-    ERR_UNKNOWN = 0,
+    ERR_NONE = 0,
     ERR_PARSER,
     ERR_MISSING,
     ERR_MISSING_ARG,
-    ERR_INVALID_ARG
+    ERR_INVALID_ARG,
+    ERR_INVALID_EA,
+    ERR_INVALID_LINE,
+    ERR_EXP_SYNTAX
 } err_num;
 
 void Error(err_num, char *, ...);
 
 typedef enum {
-    WARN_UNKNOWN = 0,
+    WARN_NONE = 0,
     WARN_UNREC_CHAR,
     WARN_VALUE_EXCEEDS_BOUNDS
 } warn_num;
 
 void Warning(warn_num, char *, ...);
 
+void OutputError(void);
+void OutputWarning(void);
+
 #endif