#include "errout.h"
#include "debug.h"
+#if __STDC__
+#include <stdarg.h>
+#else
#include <varargs.h>
+#endif
#include <system.h>
#include <em_arith.h>
node, whereas other errors use the information in the token.
*/
+#if __STDC__
+#ifdef DEBUG
+/*VARARGS*/
+debug(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(VDEBUG, NULLNODE, ap);
+ }
+ va_end(ap);
+}
+#endif /* DEBUG */
+
+/*VARARGS*/
+error(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(ERROR, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+node_error(t_node *node, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(ERROR, node, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+warning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(WARNING, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+node_warning(t_node *node, char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(WARNING, node, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+lexerror(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(LEXERROR, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+lexwarning(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(LEXWARNING, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+}
+
+/*VARARGS*/
+fatal(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(FATAL, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+ sys_stop(S_EXIT);
+}
+
+/*VARARGS*/
+crash(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ {
+ _error(CRASH, NULLNODE, fmt, ap);
+ }
+ va_end(ap);
+#ifdef DEBUG
+ sys_stop(S_ABORT);
+#else
+ sys_stop(S_EXIT);
+#endif
+}
+#else
#ifdef DEBUG
/*VARARGS*/
debug(va_alist)
va_start(ap);
{
- _error(VDEBUG, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(VDEBUG, NULLNODE, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(ERROR, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(ERROR, NULLNODE, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
t_node *node = va_arg(ap, t_node *);
-
- _error(ERROR, node, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(ERROR, node, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(WARNING, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(WARNING, NULLNODE, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
t_node *nd = va_arg(ap, t_node *);
- _error(WARNING, nd, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(WARNING, nd, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(LEXERROR, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(LEXERROR, NULLNODE, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(LEXWARNING, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(LEXWARNING, NULLNODE, fmt, ap);
}
va_end(ap);
}
va_start(ap);
{
- _error(FATAL, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(FATAL, NULLNODE, fmt, ap);
}
va_end(ap);
sys_stop(S_EXIT);
va_start(ap);
{
- _error(CRASH, NULLNODE, ap);
+ char *fmt = va_arg(ap, char *);
+ _error(CRASH, NULLNODE, fmt, ap);
}
va_end(ap);
#ifdef DEBUG
sys_stop(S_EXIT);
#endif
}
+#endif
-_error(class, node, ap)
+_error(class, node, fmt, ap)
int class;
t_node *node;
+ char *fmt;
register va_list ap;
{
/* _error attempts to limit the number of error messages
unsigned int ln = 0;
register char *remark = 0;
int warn_class;
- char *fmt;
/* check visibility of message */
if (class == ERROR || class == WARNING) {
break;
}
- fmt = va_arg(ap, char *);
-
if (FileName) fprint(ERROUT, "\"%s\", line %u: ", FileName, ln);
if (remark) fprint(ERROUT, "%s ", remark);