code / tomo

Lines41.8K C24.0K Markdown9.8K YAML5.0K Tomo2.3K
8 others 800
make256 Python231 Shell220 INI47 Text21 SVG16 Lua6 diff3
(43 lines)
1 // Failure functions
2 #include <errno.h>
3 #include <signal.h>
4 #include <stdio.h>
6 #include "../util.h"
7 #include "fail.h"
8 #include "files.h"
9 #include "stacktrace.h"
10 #include "stdlib.h"
11 #include "text.h"
12 #include "util.h"
14 public
15 _Noreturn void fail_text(Text_t message) {
16 fail(message);
19 public
20 Text_t builtin_last_err() {
21 return Text$from_str(strerror(errno));
24 public
25 _Noreturn void fail_source(const char *filename, int start, int end, Text_t message) {
26 tomo_cleanup();
27 fflush(stdout);
28 if (USE_COLOR) fputs("\x1b[91;7;1m Runtime Error \n\n\x1b[0;1m", stderr);
29 else fputs("Runtime Error\n\n", stderr);
30 print_stacktrace(stderr, 1);
31 fputs("\n", stderr);
32 if (USE_COLOR) fputs("\x1b[91;1m", stderr);
33 Text$print(stderr, message);
34 file_t *_file = (filename) ? load_file(filename) : NULL;
35 if ((filename) && _file) {
36 fputs("\n", stderr);
37 highlight_error(_file, _file->text + (start), _file->text + (end), "\x1b[91;1m", 1, USE_COLOR);
39 if (USE_COLOR) fputs("\x1b[m", stderr);
40 fflush(stderr);
41 raise(SIGABRT);
42 exit(1);