diff --git a/tool/cmd/validate.c b/tool/cmd/validate.c index 1966e30..51b6bf0 100644 --- a/tool/cmd/validate.c +++ b/tool/cmd/validate.c @@ -1,3 +1,4 @@ +#include "../diag/diag.h" #include "cmd.h" #include @@ -26,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -68,7 +70,10 @@ static int validate_file(const char *path, const b_arglist *args) mie_builtin_passes_register(ctx); - struct mie_lex *lex = mie_lex_create(file); + struct mie_line_source src; + mie_line_source_init(&src, path, file); + + struct mie_lex *lex = mie_lex_create(&src, ctx); struct mie_parser *parse = mie_parser_create(ctx, lex); struct mie_name_map *names = mie_name_map_create(NULL); @@ -76,6 +81,13 @@ static int validate_file(const char *path, const b_arglist *args) struct mie_op *root = mie_op_create(); if (!mie_parser_parse_op(parse, NULL, root)) { + struct mie_diag *diag = mie_ctx_pop_diag(ctx); + while (diag) { + mie_diag_write_pretty(diag, b_stdtty_err); + /* TODO cleanup */ + diag = mie_ctx_pop_diag(ctx); + } + printf("parse failed\n"); return -1; } @@ -215,6 +227,8 @@ static int validate_file(const char *path, const b_arglist *args) mie_lex_destroy(lex); + mie_line_source_cleanup(&src); + b_file_unref(file); return 0;