diff options
| -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);  } | 
