Add warnings for empty elements in lists of consts

Even though this behaviour is documented (empty elements are treated as
0), it can be misleading. By having a warning, compatibility is
maintained and potential problems in the code can be detected.

Signed-off-by: Antonio Niño Díaz <antonio_nd@outlook.com>
This commit is contained in:
Antonio Niño Díaz
2017-12-07 22:35:34 +00:00
parent e7a8bb1140
commit 781c90b940

View File

@@ -982,33 +982,50 @@ const_3bit : const
} }
; ;
constlist_8bit : constlist_8bit_entry constlist_8bit : constlist_8bit_entry
| constlist_8bit_entry ',' constlist_8bit | constlist_8bit_entry ',' constlist_8bit
; ;
constlist_8bit_entry : { out_Skip( 1 ); } constlist_8bit_entry : /* empty */ {
| const_8bit { out_RelByte( &$1 ); } out_Skip( 1 );
| string { char *s; int length; s = $1; length = charmap_Convert(&s); out_AbsByteGroup(s, length); free(s); } if( nPass==1 )
warning("Empty entry in list of 8-bit elements (treated as 0).");
} | 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 : constlist_16bit_entry
| constlist_16bit_entry ',' constlist_16bit | constlist_16bit_entry ',' constlist_16bit
; ;
constlist_16bit_entry : { out_Skip( 2 ); } constlist_16bit_entry : /* empty */ {
| const_16bit { out_RelWord( &$1 ); } out_Skip( 2 );
if( nPass==1 )
warning("Empty entry in list of 16-bit elements (treated as 0).");
} | const_16bit {
out_RelWord( &$1 );
}
; ;
constlist_32bit : constlist_32bit_entry
constlist_32bit : constlist_32bit_entry | constlist_32bit_entry ',' constlist_32bit
| constlist_32bit_entry ',' constlist_32bit
; ;
constlist_32bit_entry : { out_Skip( 4 ); } constlist_32bit_entry : /* empty */ {
| relocconst { out_RelLong( &$1 ); } out_Skip( 4 );
if( nPass==1 )
warning("Empty entry in list of 32-bit elements (treated as 0).");
} | relocconst {
out_RelLong( &$1 );
}
; ;
const_PCrel : relocconst const_PCrel : relocconst
{ {
$$ = $1; $$ = $1;