diff --git a/macros/standard.mac b/macros/standard.mac index a2ab4fc1..f2e5d7f1 100644 --- a/macros/standard.mac +++ b/macros/standard.mac @@ -99,7 +99,13 @@ STD: nasm %endmacro %imacro at 1-2+.nolist - times (%1-%$strucname)-($-%$strucstart) db 0 + %defstr %$member %1 + %substr %$member1 %$member 1 + %ifidn %$member1, '.' + times (%$strucname%1-%$strucname)-($-%$strucstart) db 0 + %else + times (%1-%$strucname)-($-%$strucstart) db 0 + %endif %2 %endmacro diff --git a/test/istruc_local.asm b/test/istruc_local.asm new file mode 100644 index 00000000..b24e2b2e --- /dev/null +++ b/test/istruc_local.asm @@ -0,0 +1,37 @@ +;Testname=test; Arguments=-fbin -oistruc_local.bin; Files=stdout stderr istruc_local.bin + +struc Struc1 + .dword: resd 1 + .word: resw 1 +endstruc + +struc Struc2 + .word: resw 1 + .dword: resd 1 +endstruc + +; The following returned error about negative values for TIMES in nasm 2.15.05 +; because local labels seemingly matching Struc1 have been replaced by those in +; Struc2. + +istruc Struc1 + at .dword, dd 0xffffffff + at .word, dw 0x1111 +iend + +; The following two just didn't work as istruc was just literally outputting +; local labels which are unknown after a global label appears. + +struc1: + +istruc Struc1 + at .dword, dd 0x78563412 + at .word, dw 0xbc9a +iend + +struc2: + +istruc Struc2 + at .word, dw 0xbc9a + at .dword, dd 0x78563412 +iend