aboutsummaryrefslogtreecommitdiff
path: root/src/errmsg.cpp
diff options
context:
space:
mode:
authorJosh Wolfe <thejoshwolfe@gmail.com>2015-12-01 10:44:30 -0700
committerJosh Wolfe <thejoshwolfe@gmail.com>2015-12-01 10:44:30 -0700
commitab327344b671bff7f874f24691d7e3f19176167c (patch)
treec437760bbc1f7059417b21e37c3d15a42534d4e8 /src/errmsg.cpp
parent9278dbedd5242bf4253da29c0fab36eea9dda61b (diff)
parentdfb6682089ad758b7ba72733778a9aa8c544c164 (diff)
downloadzig-ab327344b671bff7f874f24691d7e3f19176167c.tar.gz
zig-ab327344b671bff7f874f24691d7e3f19176167c.zip
merge conflicts
Diffstat (limited to 'src/errmsg.cpp')
-rw-r--r--src/errmsg.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/errmsg.cpp b/src/errmsg.cpp
new file mode 100644
index 0000000000..00557e0214
--- /dev/null
+++ b/src/errmsg.cpp
@@ -0,0 +1,38 @@
+#include "errmsg.hpp"
+#include "os.hpp"
+
+#include <stdio.h>
+
+#define RED "\x1b[31;1m"
+#define WHITE "\x1b[37;1m"
+#define GREEN "\x1b[32;1m"
+#define RESET "\x1b[0m"
+
+void print_err_msg(ErrorMsg *err, ErrColor color) {
+ if (color == ErrColorOn || (color == ErrColorAuto && os_stderr_tty())) {
+ fprintf(stderr, WHITE "%s:%d:%d: " RED "error:" WHITE " %s" RESET "\n",
+ buf_ptr(err->path),
+ err->line_start + 1, err->column_start + 1,
+ buf_ptr(err->msg));
+
+ assert(err->source);
+ assert(err->line_offsets);
+
+ int line_start_offset = err->line_offsets->at(err->line_start);
+ int line_end_offset = err->line_offsets->at(err->line_start + 1);
+
+ fwrite(buf_ptr(err->source) + line_start_offset, 1, line_end_offset - line_start_offset - 1, stderr);
+ fprintf(stderr, "\n");
+ for (int i = 0; i < err->column_start; i += 1) {
+ fprintf(stderr, " ");
+ }
+ fprintf(stderr, GREEN "^" RESET "\n");
+
+ } else {
+ fprintf(stderr, "%s:%d:%d: error: %s\n",
+ buf_ptr(err->path),
+ err->line_start + 1, err->column_start + 1,
+ buf_ptr(err->msg));
+ }
+}
+