From fe6e5e445bd6ac0e53200da95884cdb7746b002c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ni=C3=B1o=20D=C3=ADaz?= Date: Fri, 29 Dec 2017 12:05:57 +0100 Subject: [PATCH] Remove warning on DB/DW/DL emtpy lists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This warning was added in 781c90b940ba24e23eb6c92eea6549f7643746fa as a way of catching the following cases, which are most likely programmer mistakes: DB 1,, 2 DB 1, 2, However, the warning was also triggered in the following case: DB It can be used as a replacement of: DS 1 In this case, it shouldn't output a warning. Signed-off-by: Antonio Niño Díaz --- src/asm/asmy.y | 35 ++++++++++++++++++++++++++++++++--- src/asm/rgbasm.5 | 2 +- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/asm/asmy.y b/src/asm/asmy.y index cebca0a0..cac9b637 100644 --- a/src/asm/asmy.y +++ b/src/asm/asmy.y @@ -806,13 +806,16 @@ ds : T_POP_DS uconst { out_Skip( $2 ); } ; -db : T_POP_DB constlist_8bit +db : T_POP_DB constlist_8bit_entry ',' constlist_8bit + | T_POP_DB constlist_8bit_entry_single ; -dw : T_POP_DW constlist_16bit +dw : T_POP_DW constlist_16bit_entry ',' constlist_16bit + | T_POP_DW constlist_16bit_entry_single ; -dl : T_POP_DL constlist_32bit +dl : T_POP_DL constlist_32bit_entry ',' constlist_32bit + | T_POP_DL constlist_32bit_entry_single ; purge : T_POP_PURGE @@ -1000,6 +1003,18 @@ constlist_8bit_entry : /* empty */ { } ; +constlist_8bit_entry_single : /* empty */ { + out_Skip( 1 ); + } | const_8bit { + out_RelByte( &$1 ); + } | string { + char *s = $1; + int length = charmap_Convert(&s); + out_AbsByteGroup(s, length); + free(s); + } +; + constlist_16bit : constlist_16bit_entry | constlist_16bit_entry ',' constlist_16bit ; @@ -1013,6 +1028,13 @@ constlist_16bit_entry : /* empty */ { } ; +constlist_16bit_entry_single : /* empty */ { + out_Skip( 2 ); + } | const_16bit { + out_RelWord( &$1 ); + } +; + constlist_32bit : constlist_32bit_entry | constlist_32bit_entry ',' constlist_32bit ; @@ -1026,6 +1048,13 @@ constlist_32bit_entry : /* empty */ { } ; +constlist_32bit_entry_single : /* empty */ { + out_Skip( 4 ); + } | relocconst { + out_RelLong( &$1 ); + } +; + const_PCrel : relocconst { $$ = $1; diff --git a/src/asm/rgbasm.5 b/src/asm/rgbasm.5 index f4051afb..f25d5696 100644 --- a/src/asm/rgbasm.5 +++ b/src/asm/rgbasm.5 @@ -598,7 +598,7 @@ allocates a number of bytes. The content is undefined. This is the preferred method of allocationg space in a RAM section. You can, however, use -.Ic DB , +.Ic DB , .Ic DW and .Ic DL