| ... | @@ -27,9 +27,17 @@ static void resolve_enum_zero_bits(CodeGen *g, TypeTableEntry *enum_type); | ... | @@ -27,9 +27,17 @@ static void resolve_enum_zero_bits(CodeGen *g, TypeTableEntry *enum_type); |
| 27 | static void resolve_union_zero_bits(CodeGen *g, TypeTableEntry *union_type); | 27 | static void resolve_union_zero_bits(CodeGen *g, TypeTableEntry *union_type); |
| 28 | | 28 | |
| 29 | ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg) { | 29 | ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg) { |
| 30 | // if this assert fails, then parsec generated code that | 30 | if (node->owner->c_import_node != nullptr) { |
| 31 | // failed semantic analysis, which isn't supposed to happen | 31 | // if this happens, then parsec generated code that |
| 32 | assert(!node->owner->c_import_node); | 32 | // failed semantic analysis, which isn't supposed to happen |
| | 33 | ErrorMsg *err = add_node_error(g, node->owner->c_import_node, |
| | 34 | buf_sprintf("compiler bug: @cImport generated invalid zig code")); |
| | 35 | |
| | 36 | add_error_note(g, err, node, msg); |
| | 37 | |
| | 38 | g->errors.append(err); |
| | 39 | return err; |
| | 40 | } |
| 33 | | 41 | |
| 34 | ErrorMsg *err = err_msg_create_with_line(node->owner->path, node->line, node->column, | 42 | ErrorMsg *err = err_msg_create_with_line(node->owner->path, node->line, node->column, |
| 35 | node->owner->source_code, node->owner->line_offsets, msg); | 43 | node->owner->source_code, node->owner->line_offsets, msg); |
| ... | @@ -39,9 +47,20 @@ ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg) { | ... | @@ -39,9 +47,20 @@ ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg) { |
| 39 | } | 47 | } |
| 40 | | 48 | |
| 41 | ErrorMsg *add_error_note(CodeGen *g, ErrorMsg *parent_msg, AstNode *node, Buf *msg) { | 49 | ErrorMsg *add_error_note(CodeGen *g, ErrorMsg *parent_msg, AstNode *node, Buf *msg) { |
| 42 | // if this assert fails, then parsec generated code that | 50 | if (node->owner->c_import_node != nullptr) { |
| 43 | // failed semantic analysis, which isn't supposed to happen | 51 | // if this happens, then parsec generated code that |
| 44 | assert(!node->owner->c_import_node); | 52 | // failed semantic analysis, which isn't supposed to happen |
| | 53 | |
| | 54 | Buf *note_path = buf_create_from_str("?.c"); |
| | 55 | Buf *note_source = buf_create_from_str("TODO: remember C source location to display here "); |
| | 56 | ZigList<size_t> note_line_offsets = {0}; |
| | 57 | note_line_offsets.append(0); |
| | 58 | ErrorMsg *note = err_msg_create_with_line(note_path, 0, 0, |
| | 59 | note_source, &note_line_offsets, msg); |
| | 60 | |
| | 61 | err_msg_add_note(parent_msg, note); |
| | 62 | return note; |
| | 63 | } |
| 45 | | 64 | |
| 46 | ErrorMsg *err = err_msg_create_with_line(node->owner->path, node->line, node->column, | 65 | ErrorMsg *err = err_msg_create_with_line(node->owner->path, node->line, node->column, |
| 47 | node->owner->source_code, node->owner->line_offsets, msg); | 66 | node->owner->source_code, node->owner->line_offsets, msg); |