diff options
author | Oxore <oxore@protonmail.com> | 2023-08-11 00:41:32 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2023-08-11 00:41:32 +0300 |
commit | d68014816affd9a44458969c47c1803f8d5bbac9 (patch) | |
tree | de4a9f40e4ae77b18ce7d3538519e2d1de309d81 | |
parent | 12169534d91f9fe5f0887c86cef3636a94448b33 (diff) |
Fix printing raw tokens of directives
-rw-r--r-- | main.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -412,6 +412,7 @@ struct instruction { struct directive { enum directive_type type; + size_t name_token; /// Directive self first token size_t first_token, num_tokens; /// Directive arguments tokens span }; @@ -1991,13 +1992,16 @@ static int pars_finish_directive( if (ret != OK) { return ret; } + // First token of the directive precedes token of it's arguments, that's why + // we subtract 1 here + const size_t first_token = label_id ? label_id : directive.name_token; const struct stmt stmt = { .type = ST_DIRECTIVE, .directive = directive, .label_token = label_id, .comment_token = comment_id, - .first_token = label_id, - .num_tokens = self->cur_tok_id - label_id, + .first_token = first_token, + .num_tokens = self->cur_tok_id - first_token, }; fwrite_stmt(&stmt, self->stmttab_stream); return OK; @@ -2008,6 +2012,7 @@ static int pars_directive_skip( const enum directive_type drc, const size_t label_id) { + const size_t name_token = self->cur_tok_id - 1; const size_t first_token = self->cur_tok_id; size_t num_tokens = 0; while (1) { @@ -2020,7 +2025,7 @@ static int pars_directive_skip( pars_commit(self); num_tokens++; } - const struct directive directive = { drc, first_token, num_tokens }; + const struct directive directive = { drc, name_token, first_token, num_tokens }; return pars_finish_directive(self, label_id, directive); } @@ -2029,6 +2034,7 @@ static int pars_directive_handler_def( const enum directive_type drc, const size_t label_id) { + const size_t name_token = self->cur_tok_id - 1; const struct token token = pars_peek(self); if (token.type != TT_ID) { return pars_yield_error(self, self->cur_tok_id, E_ID); @@ -2037,7 +2043,7 @@ static int pars_directive_handler_def( return pars_yield_error_msg(self, self->cur_tok_id, E_NESTED_DEF); } self->in_sat = true; - const struct directive directive = { drc, pars_commit(self), 1 }; + const struct directive directive = { drc, name_token, pars_commit(self), 1 }; return pars_finish_directive(self, label_id, directive); } @@ -2050,7 +2056,8 @@ static int pars_directive_handler_endef( return pars_yield_error_msg(self, self->cur_tok_id, E_NMATCH_ENDEF); } self->in_sat = false; - const struct directive directive = { drc, 0, 0 }; + const size_t name_token = self->cur_tok_id - 1; + const struct directive directive = { drc, name_token, 0, 0 }; return pars_finish_directive(self, label_id, directive); } |