ox

The Ox programming language, compiler and tools (WIP)
Log | Files | Refs | README | LICENSE

utils.c (1067B)


      1 #include "utils.h"
      2 
      3 #include <errno.h>
      4 #include <stdio.h>
      5 #include <stdlib.h>
      6 #include <stdarg.h>
      7 #include <string.h>
      8 
      9 void
     10 panic_at(Node* node, const char* fmt, ...)
     11 {
     12 	va_list args;
     13 	int saved_errno;
     14 	saved_errno = errno;
     15 	va_start(args, fmt);
     16 	fprintf(stderr, "%s, [%zu:%zu] ", node->filename, node->line, node->col);
     17 	fprintf(stderr, "Error: ");
     18 	vfprintf(stderr, fmt, args);
     19 	fprintf(stderr, "\n");
     20 	va_end(args);
     21 	if (fmt[0] && fmt[strlen(fmt) - 1] == ':') fprintf(stderr, " %s", strerror(saved_errno));
     22 	fputc('\n', stderr);
     23 	exit(1);
     24 }
     25 
     26 void
     27 panic(const char* fmt, ...)
     28 {
     29 	va_list args;
     30 	int saved_errno;
     31 	saved_errno = errno;
     32 	va_start(args, fmt);
     33 	fprintf(stderr, "Error: ");
     34 	vfprintf(stderr, fmt, args);
     35 	fprintf(stderr, "\n");
     36 	va_end(args);
     37 	if (fmt[0] && fmt[strlen(fmt) - 1] == ':') fprintf(stderr, " %s", strerror(saved_errno));
     38 	fputc('\n', stderr);
     39 	exit(1);
     40 }
     41 
     42 void
     43 softpanic(const char* fmt, ...)
     44 {
     45 	va_list args;
     46 	va_start(args, fmt);
     47 	fprintf(stderr, "Error: ");
     48 	vfprintf(stderr, fmt, args);
     49 	fprintf(stderr, "\n");
     50 	va_end(args);
     51 	exit(0);
     52 }