From fe985ca7815bf729323af1578582fac759d85a67 Mon Sep 17 00:00:00 2001 From: Igor M Date: Sun, 17 Mar 2024 18:05:09 +0200 Subject: [PATCH] fixed error reporting --- src/directive.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/directive.c b/src/directive.c index 2f002b1..913e40e 100644 --- a/src/directive.c +++ b/src/directive.c @@ -3,10 +3,10 @@ AsmError push_string(char *buf, char *input, size_t len) { for (size_t pos = 0; pos < len; pos += 1) { char chr = input[pos]; if (chr == '\\') { - pos += 1; if (pos + 1 >= len) { return ErrDanglingEscape; } + pos += 1; chr = input[pos]; size_t offset = 1; switch (chr) { @@ -96,7 +96,7 @@ AsmError assemble_directive(char *input, size_t len, ByteVec *out, Token *tok) { size_t pos = tok->start; char byte0 = input[pos]; char byte1 = input[pos + 1]; - if (tok->len == 0 && byte0 == 'd') { + if (tok->len == 2 && byte0 == 'd') { size_t word_size; switch (byte1) { case 'b': @@ -122,7 +122,7 @@ AsmError assemble_directive(char *input, size_t len, ByteVec *out, Token *tok) { return ErrAlignNeedsNumber; } size_t mask = tok->num - 1; - if ((tok->num & mask) != 0) { + if (tok->num == 0 || (tok->num & mask) != 0) { return ErrAlignNeedsPow2; } if ((~(size_t)0) - mask < out->len) { @@ -134,6 +134,7 @@ AsmError assemble_directive(char *input, size_t len, ByteVec *out, Token *tok) { } // TODO: zero-fill? out->len = aligned; + return ErrOk; } - return ErrOk; + return ErrInvalidDirective; }