diff options
| author | Josh Wolfe <thejoshwolfe@gmail.com> | 2015-12-01 10:44:30 -0700 |
|---|---|---|
| committer | Josh Wolfe <thejoshwolfe@gmail.com> | 2015-12-01 10:44:30 -0700 |
| commit | ab327344b671bff7f874f24691d7e3f19176167c (patch) | |
| tree | c437760bbc1f7059417b21e37c3d15a42534d4e8 /src/errmsg.cpp | |
| parent | 9278dbedd5242bf4253da29c0fab36eea9dda61b (diff) | |
| parent | dfb6682089ad758b7ba72733778a9aa8c544c164 (diff) | |
| download | zig-ab327344b671bff7f874f24691d7e3f19176167c.tar.gz zig-ab327344b671bff7f874f24691d7e3f19176167c.zip | |
merge conflicts
Diffstat (limited to 'src/errmsg.cpp')
| -rw-r--r-- | src/errmsg.cpp | 38 |
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)); + } +} + |
