fixed error reporting
This commit is contained in:
parent
4beaee5dab
commit
fe985ca781
|
@ -3,10 +3,10 @@ AsmError push_string(char *buf, char *input, size_t len) {
|
||||||
for (size_t pos = 0; pos < len; pos += 1) {
|
for (size_t pos = 0; pos < len; pos += 1) {
|
||||||
char chr = input[pos];
|
char chr = input[pos];
|
||||||
if (chr == '\\') {
|
if (chr == '\\') {
|
||||||
pos += 1;
|
|
||||||
if (pos + 1 >= len) {
|
if (pos + 1 >= len) {
|
||||||
return ErrDanglingEscape;
|
return ErrDanglingEscape;
|
||||||
}
|
}
|
||||||
|
pos += 1;
|
||||||
chr = input[pos];
|
chr = input[pos];
|
||||||
size_t offset = 1;
|
size_t offset = 1;
|
||||||
switch (chr) {
|
switch (chr) {
|
||||||
|
@ -96,7 +96,7 @@ AsmError assemble_directive(char *input, size_t len, ByteVec *out, Token *tok) {
|
||||||
size_t pos = tok->start;
|
size_t pos = tok->start;
|
||||||
char byte0 = input[pos];
|
char byte0 = input[pos];
|
||||||
char byte1 = input[pos + 1];
|
char byte1 = input[pos + 1];
|
||||||
if (tok->len == 0 && byte0 == 'd') {
|
if (tok->len == 2 && byte0 == 'd') {
|
||||||
size_t word_size;
|
size_t word_size;
|
||||||
switch (byte1) {
|
switch (byte1) {
|
||||||
case 'b':
|
case 'b':
|
||||||
|
@ -122,7 +122,7 @@ AsmError assemble_directive(char *input, size_t len, ByteVec *out, Token *tok) {
|
||||||
return ErrAlignNeedsNumber;
|
return ErrAlignNeedsNumber;
|
||||||
}
|
}
|
||||||
size_t mask = tok->num - 1;
|
size_t mask = tok->num - 1;
|
||||||
if ((tok->num & mask) != 0) {
|
if (tok->num == 0 || (tok->num & mask) != 0) {
|
||||||
return ErrAlignNeedsPow2;
|
return ErrAlignNeedsPow2;
|
||||||
}
|
}
|
||||||
if ((~(size_t)0) - mask < out->len) {
|
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?
|
// TODO: zero-fill?
|
||||||
out->len = aligned;
|
out->len = aligned;
|
||||||
}
|
|
||||||
return ErrOk;
|
return ErrOk;
|
||||||
|
}
|
||||||
|
return ErrInvalidDirective;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue