From 59711f17f2edb5a663f26a04571b5a7d826f7b68 Mon Sep 17 00:00:00 2001 From: Olaf Seibert Date: Tue, 19 May 2015 22:57:45 +0200 Subject: [PATCH] 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 --- assemble_aux.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/assemble_aux.c b/assemble_aux.c index 752a29d..c4d33dc 100644 --- a/assemble_aux.c +++ b/assemble_aux.c @@ -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; }