diff options
Diffstat (limited to 'tokenizer.c')
-rw-r--r-- | tokenizer.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/tokenizer.c b/tokenizer.c index 103c534..9466ad8 100644 --- a/tokenizer.c +++ b/tokenizer.c @@ -190,18 +190,19 @@ static void tokenization_err_( #endif Tokenizer *t, const char *fmt, ...) { va_list args; - if (!t->err_ctx->enabled) return; + ErrCtx *ctx = t->err_ctx; + if (!ctx->enabled) return; #if ERR_SHOW_SOURCE_LOCATION - err_fprint("Generated by line %d of %s:\n", src_line, src_file); + err_fprint(ctx, "Generated by line %d of %s:\n", src_line, src_file); #endif va_start(args, fmt); - err_text_err(t->err_ctx, "error"); - err_fprint(" at line %lu of %s:\n", (unsigned long)t->line, t->err_ctx->filename); - err_vfprint(fmt, args); + err_text_err(ctx, "error"); + err_fprint(ctx, " at line %lu of %s:\n", (unsigned long)t->line, t->file->filename); + err_vfprint(ctx, fmt, args); va_end(args); - err_fprint("\n"); - U32 pos = (U32)(t->s - t->err_ctx->str); - err_print_pos_text(t->err_ctx, pos, pos + 1); + err_fprint(ctx, "\n"); + U32 pos = (U32)(t->s - t->file->contents); + print_pos_highlight(err_ctx_file(ctx), ctx, t->file, pos, pos + 1); while (*t->s) { if (*t->s == '\n') { tokr_nextchar(t); @@ -223,9 +224,10 @@ static void tokr_err_( const char *src_file, int src_line, #endif Tokenizer *t, const char *fmt, ...) { - if (!t->err_ctx->enabled) return; + ErrCtx *ctx = t->err_ctx; + if (!ctx->enabled) return; #if ERR_SHOW_SOURCE_LOCATION - err_fprint("Generated by line %d of %s:\n", src_line, src_file); + err_fprint(ctx, "Generated by line %d of %s:\n", src_line, src_file); #endif va_list args; va_start(args, fmt); @@ -242,17 +244,16 @@ static void tokr_err_( static void tokr_put_start_pos(Tokenizer *tokr, Token *t) { t->pos.line = tokr->line; - t->pos.ctx = tokr->err_ctx; - t->pos.start = (U32)(tokr->s - t->pos.ctx->str); + t->pos.start = (U32)(tokr->s - tokr->file->contents); } static void tokr_put_end_pos(Tokenizer *tokr, Token *t) { - t->pos.end = (U32)(tokr->s - t->pos.ctx->str); + t->pos.end = (U32)(tokr->s - tokr->file->contents); } static void tokr_get_start_pos(Tokenizer *tokr, Token *t) { tokr->line = t->pos.line; - tokr->s = t->pos.start + t->pos.ctx->str; + tokr->s = tokr->file->contents + t->pos.start; } /* @@ -277,10 +278,10 @@ static Token *tokr_add(Tokenizer *t) { return token; } -static bool tokenize_string(Tokenizer *t, char *str) { +static bool tokenize_file(Tokenizer *t, File *file) { int has_err = 0; - t->s = str; - t->err_ctx->str = str; + t->s = file->contents; + t->file = file; t->line = 1; while (1) { if (*t->s == 0) break; |