|
@@ -264,8 +264,9 @@ struct ErrorCollector {
|
|
|
i64 count;
|
|
|
i64 warning_count;
|
|
|
bool in_block;
|
|
|
- gbMutex mutex;
|
|
|
- gbMutex string_mutex;
|
|
|
+ BlockingMutex mutex;
|
|
|
+ BlockingMutex error_out_mutex;
|
|
|
+ BlockingMutex string_mutex;
|
|
|
|
|
|
Array<u8> error_buffer;
|
|
|
Array<String> errors;
|
|
@@ -281,8 +282,9 @@ bool any_errors(void) {
|
|
|
}
|
|
|
|
|
|
void init_global_error_collector(void) {
|
|
|
- gb_mutex_init(&global_error_collector.mutex);
|
|
|
- gb_mutex_init(&global_error_collector.string_mutex);
|
|
|
+ mutex_init(&global_error_collector.mutex);
|
|
|
+ mutex_init(&global_error_collector.error_out_mutex);
|
|
|
+ mutex_init(&global_error_collector.string_mutex);
|
|
|
array_init(&global_error_collector.errors, heap_allocator());
|
|
|
array_init(&global_error_collector.error_buffer, heap_allocator());
|
|
|
array_init(&global_file_path_strings, heap_allocator(), 4096);
|
|
@@ -293,7 +295,7 @@ void init_global_error_collector(void) {
|
|
|
bool set_file_path_string(i32 index, String const &path) {
|
|
|
bool ok = false;
|
|
|
GB_ASSERT(index >= 0);
|
|
|
- gb_mutex_lock(&global_error_collector.string_mutex);
|
|
|
+ mutex_lock(&global_error_collector.string_mutex);
|
|
|
|
|
|
if (index >= global_file_path_strings.count) {
|
|
|
array_resize(&global_file_path_strings, index);
|
|
@@ -304,14 +306,14 @@ bool set_file_path_string(i32 index, String const &path) {
|
|
|
ok = true;
|
|
|
}
|
|
|
|
|
|
- gb_mutex_unlock(&global_error_collector.string_mutex);
|
|
|
+ mutex_unlock(&global_error_collector.string_mutex);
|
|
|
return ok;
|
|
|
}
|
|
|
|
|
|
bool set_ast_file_from_id(i32 index, AstFile *file) {
|
|
|
bool ok = false;
|
|
|
GB_ASSERT(index >= 0);
|
|
|
- gb_mutex_lock(&global_error_collector.string_mutex);
|
|
|
+ mutex_lock(&global_error_collector.string_mutex);
|
|
|
|
|
|
if (index >= global_files.count) {
|
|
|
array_resize(&global_files, index);
|
|
@@ -322,39 +324,40 @@ bool set_ast_file_from_id(i32 index, AstFile *file) {
|
|
|
ok = true;
|
|
|
}
|
|
|
|
|
|
- gb_mutex_unlock(&global_error_collector.string_mutex);
|
|
|
+ mutex_unlock(&global_error_collector.string_mutex);
|
|
|
return ok;
|
|
|
}
|
|
|
|
|
|
String get_file_path_string(i32 index) {
|
|
|
GB_ASSERT(index >= 0);
|
|
|
- gb_mutex_lock(&global_error_collector.string_mutex);
|
|
|
+ mutex_lock(&global_error_collector.string_mutex);
|
|
|
|
|
|
String path = {};
|
|
|
if (index < global_file_path_strings.count) {
|
|
|
path = global_file_path_strings[index];
|
|
|
}
|
|
|
|
|
|
- gb_mutex_unlock(&global_error_collector.string_mutex);
|
|
|
+ mutex_unlock(&global_error_collector.string_mutex);
|
|
|
return path;
|
|
|
}
|
|
|
|
|
|
AstFile *get_ast_file_from_id(i32 index) {
|
|
|
GB_ASSERT(index >= 0);
|
|
|
- gb_mutex_lock(&global_error_collector.string_mutex);
|
|
|
+ mutex_lock(&global_error_collector.string_mutex);
|
|
|
|
|
|
AstFile *file = nullptr;
|
|
|
if (index < global_files.count) {
|
|
|
file = global_files[index];
|
|
|
}
|
|
|
|
|
|
- gb_mutex_unlock(&global_error_collector.string_mutex);
|
|
|
+ mutex_unlock(&global_error_collector.string_mutex);
|
|
|
return file;
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
void begin_error_block(void) {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.in_block = true;
|
|
|
}
|
|
|
|
|
@@ -367,13 +370,10 @@ void end_error_block(void) {
|
|
|
String s = {text, n};
|
|
|
array_add(&global_error_collector.errors, s);
|
|
|
global_error_collector.error_buffer.count = 0;
|
|
|
-
|
|
|
- // gbFile *f = gb_file_get_standard(gbFileStandard_Error);
|
|
|
- // gb_file_write(f, text, n);
|
|
|
}
|
|
|
|
|
|
global_error_collector.in_block = false;
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -393,14 +393,14 @@ ERROR_OUT_PROC(default_error_out_va) {
|
|
|
gb_memmove(data, buf, n);
|
|
|
global_error_collector.error_buffer.count += n;
|
|
|
} else {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.error_out_mutex);
|
|
|
{
|
|
|
u8 *text = gb_alloc_array(heap_allocator(), u8, n+1);
|
|
|
gb_memmove(text, buf, n);
|
|
|
text[n] = 0;
|
|
|
array_add(&global_error_collector.errors, make_string(text, n));
|
|
|
}
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.error_out_mutex);
|
|
|
|
|
|
}
|
|
|
gb_file_write(f, buf, n);
|
|
@@ -491,7 +491,7 @@ bool show_error_on_line(TokenPos const &pos, TokenPos end) {
|
|
|
}
|
|
|
|
|
|
void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.count++;
|
|
|
// NOTE(bill): Duplicate error, skip it
|
|
|
if (pos.line == 0) {
|
|
@@ -503,7 +503,7 @@ void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
|
|
gb_bprintf_va(fmt, va));
|
|
|
show_error_on_line(pos, end);
|
|
|
}
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT) {
|
|
|
gb_exit(1);
|
|
|
}
|
|
@@ -514,7 +514,7 @@ void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va)
|
|
|
error_va(pos, end, fmt, va);
|
|
|
return;
|
|
|
}
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.warning_count++;
|
|
|
if (!global_ignore_warnings()) {
|
|
|
// NOTE(bill): Duplicate error, skip it
|
|
@@ -528,18 +528,16 @@ void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va)
|
|
|
show_error_on_line(pos, end);
|
|
|
}
|
|
|
}
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
}
|
|
|
|
|
|
|
|
|
void error_line_va(char const *fmt, va_list va) {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
error_out_va(fmt, va);
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
}
|
|
|
|
|
|
void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.count++;
|
|
|
// NOTE(bill): Duplicate error, skip it
|
|
|
if (pos.line == 0) {
|
|
@@ -550,7 +548,7 @@ void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) {
|
|
|
token_pos_to_string(pos),
|
|
|
gb_bprintf_va(fmt, va));
|
|
|
}
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT) {
|
|
|
gb_exit(1);
|
|
|
}
|
|
@@ -558,7 +556,7 @@ void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) {
|
|
|
|
|
|
|
|
|
void syntax_error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.count++;
|
|
|
// NOTE(bill): Duplicate error, skip it
|
|
|
if (global_error_collector.prev != pos) {
|
|
@@ -571,7 +569,7 @@ void syntax_error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list
|
|
|
error_out("Syntax Error: %s\n", gb_bprintf_va(fmt, va));
|
|
|
}
|
|
|
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT) {
|
|
|
gb_exit(1);
|
|
|
}
|
|
@@ -582,7 +580,7 @@ void syntax_warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_li
|
|
|
syntax_error_va(pos, end, fmt, va);
|
|
|
return;
|
|
|
}
|
|
|
- gb_mutex_lock(&global_error_collector.mutex);
|
|
|
+ mutex_lock(&global_error_collector.mutex);
|
|
|
global_error_collector.warning_count++;
|
|
|
if (!global_ignore_warnings()) {
|
|
|
// NOTE(bill): Duplicate error, skip it
|
|
@@ -596,7 +594,7 @@ void syntax_warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_li
|
|
|
error_out("Warning: %s\n", gb_bprintf_va(fmt, va));
|
|
|
}
|
|
|
}
|
|
|
- gb_mutex_unlock(&global_error_collector.mutex);
|
|
|
+ mutex_unlock(&global_error_collector.mutex);
|
|
|
}
|
|
|
|
|
|
|