diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2015-12-01 00:50:11 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2015-12-01 00:50:11 -0700 |
| commit | 257cf09472ce5f4a51bf39808e119717fa0e4280 (patch) | |
| tree | 722cbc737134b1aa03fafac400f680f20007308a /src/errmsg.cpp | |
| parent | 31cf43de54c012c3b6f4fa7a516e2aac0ae18b56 (diff) | |
| download | zig-257cf09472ce5f4a51bf39808e119717fa0e4280.tar.gz zig-257cf09472ce5f4a51bf39808e119717fa0e4280.zip | |
colored error messages that tell the source file
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..36d203a48f --- /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) { + if (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)); + } +} + |
