summaryrefslogtreecommitdiff
path: root/tokenizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'tokenizer.c')
-rw-r--r--tokenizer.c35
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;