%include "lmacros3.mac" numdef CHECKCALLSECTION, 0 %if _CHECKCALLSECTION %imacro call 1.nolist %? %1 %push %assign %$size 2 %assign %$isreg 0 %assign %$exit 0 %rep 2 %ifn %$exit %if %$size == 2 %define %$regnames "ax cx dx bx sp bp si di " %elif %$size == 4 %define %$regnames "eax ecx edx ebx esp ebp esi edi " %endif %assign %$index 0 %rep 8 %ifn %$exit %substr %$reg %$regnames %$index * 4 + 1, 4 %deftok %$reg %$reg %ifnempty %$reg %ifidni %$reg, %1 %assign %$isreg %$size %assign %$exit 1 %exitrep %endif %endif %endif %assign %$index %$index + 1 %endrep %if %$exit %exitrep %endif %assign %$size %$size * 2 %endif %endrep %assign %$ismulti 0 %assign %$ismem 0 %defstr %$string %1 %strlen %$length %$string %assign %$ii 0 %rep %$length %substr %$point %$string %$ii + 1, 1 %if %$point == 32 || %$point == 9 %assign %$ismulti 1 %endif %ifidn %$point, '[' %assign %$ismem 1 %endif %assign %$ii %$ii + 1 %endrep %assign %$islocal 0 %substr %$point %$string 1, 1 %substr %$prefix %$string 1, 3 %ifidn %$point, '.' %ifnidn %$prefix, '..@' %assign %$islocal 1 %endif %endif %if %$isreg %if %$isreg == 4 %warning 32-bit reg call: %1 %else %warning 16-bit reg call: %1 %endif %elif %$ismulti || %$ismem %warning not single call: %1 %elif %$islocal %warning local call: %1 %elifdef SECTION_OF_%1 %ifnidni SECTION_OF_%1, _CURRENT_SECTION %error Symbol %1 called wrongly: section_of=SECTION_OF_%1, current=_CURRENT_SECTION %endif %endif %pop %endmacro %endif numdef OUTER, 1 numdef INNER, 1 addsection TEST label: labelfoo: labelbar: labelbaz: .: %rep _OUTER call cx call near [0] call . %rep _INNER call label call labelfoo call labelbar call labelbaz %endrep %endrep %macro quux 0 %ifidn %00, %endif %endmacro label quux