aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp29
1 files changed, 9 insertions, 20 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 17e37db1e2..be5acd9a95 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -488,23 +488,16 @@ __attribute__ ((noreturn))
static void ast_asm_error(ParseContext *pc, AstNode *node, int offset, const char *format, ...) {
assert(node->type == NodeTypeAsmExpr);
- ErrorMsg *err = allocate<ErrorMsg>(1);
SrcPos pos = node->data.asm_expr.offset_map.at(offset);
- err->line_start = pos.line;
- err->column_start = pos.column;
- err->line_end = -1;
- err->column_end = -1;
-
va_list ap;
va_start(ap, format);
- err->msg = buf_vprintf(format, ap);
+ Buf *msg = buf_vprintf(format, ap);
va_end(ap);
- err->path = pc->owner->path;
- err->source = pc->owner->source_code;
- err->line_offsets = pc->owner->line_offsets;
+ ErrorMsg *err = err_msg_create_with_line(pc->owner->path, pos.line, pos.column,
+ pc->owner->source_code, pc->owner->line_offsets, msg);
print_err_msg(err, pc->err_color);
exit(EXIT_FAILURE);
@@ -513,20 +506,16 @@ static void ast_asm_error(ParseContext *pc, AstNode *node, int offset, const cha
__attribute__ ((format (printf, 3, 4)))
__attribute__ ((noreturn))
static void ast_error(ParseContext *pc, Token *token, const char *format, ...) {
- ErrorMsg *err = allocate<ErrorMsg>(1);
- err->line_start = token->start_line;
- err->column_start = token->start_column;
- err->line_end = -1;
- err->column_end = -1;
-
va_list ap;
va_start(ap, format);
- err->msg = buf_vprintf(format, ap);
+ Buf *msg = buf_vprintf(format, ap);
va_end(ap);
- err->path = pc->owner->path;
- err->source = pc->owner->source_code;
- err->line_offsets = pc->owner->line_offsets;
+
+ ErrorMsg *err = err_msg_create_with_line(pc->owner->path, token->start_line, token->start_column,
+ pc->owner->source_code, pc->owner->line_offsets, msg);
+ err->line_start = token->start_line;
+ err->column_start = token->start_column;
print_err_msg(err, pc->err_color);
exit(EXIT_FAILURE);