Make trailing commas work in .BYTE and .WORD

16 000000 000123                  state:  .word   123    ; 1 word
      17 000002 000000                          .word          ; 1 word
      18 000004 000001  000000                  .word   1,     ; 2 words
      19 000010 000000  000002                  .word   ,2     ; 2 words
      20 000014 000000  000000                  .word   ,      ; 2 words
      21 000020 000000  000000  000000          .word   ,,     ; 3 words
      22 000026 000001  000000  000000          .word   1,,    ; 3 words
      23 000034 000000  000000  000003          .word   ,,3    ; 3 words
      24 000042 000001  000000  000003          .word   1,,3   ; 3 words
      25 000050 000001  000002  000003          .word   1,2,3  ; 3 words
This commit is contained in:
Olaf Seibert 2015-05-19 22:57:45 +02:00
parent dbc3a55666
commit 59711f17f2

View File

@ -637,6 +637,8 @@ int do_word(
char *cp,
int size)
{
int comma;
if (size == 2 && (DOT & 1)) {
report(stack->top, ".WORD on odd boundary\n");
store_word(stack->top, tr, 1, 0); /* Align it */
@ -653,11 +655,16 @@ int do_word(
store_value(stack, tr, size, value);
cp = skipdelim(value->cp);
cp = value->cp;
free_tree(value);
}
} while (cp = skipdelim(cp), !EOL(*cp));
} while (cp = skipdelim_comma(cp, &comma), !EOL(*cp));
if (comma) {
/* Trailing empty expressions count as 0 */
store_word(stack->top, tr, size, 0);
}
return 1;
}