flat assembler
Message board for the users of flat assembler.
Index
> Compiler Internals > [fasmg] macro doesn't redefine after wrapping it in another |
| Author |
|
|
Tomasz Grysztar 08 Oct 2026, 09:53
An unconditional macro becomes unrolled even during a definition of another macro.
For example, this means that your "wrapped" macro is actually defined as such: Code: macro wrapped name* macro end.wrapped! end block purge end.wrapped end macro ; unrolled unconditional "block" macro; macro end.block! name._endpos: purge end.block end macro label name: name._endpos - name end macro However, there is another effect when the "wrapped" macro is called one after another (nested as in your example), because until the outer block is closed, "end.block" is defined as unconditional macro. It becomes unrolled in the definition of the "end.wrapped" macro, and so "end.wrapped" has the previous definition of "end.block" unrolled in its body. You can verify that the problem disappears if you don't make "end.block" unconditional: Code: macro block! name* macro end.block name._endpos: purge end.block end macro label name: name._endpos - name end macro macro wrapped name* macro end.wrapped! end block purge end.wrapped end macro block name end macro block a block b end block end block wrapped x wrapped y end wrapped end wrapped Code: macro block! name* macro end.block! name._endpos: purge end.block end macro label name: name._endpos - name end macro macro wrapped name* macro end.wrapped! esc end block purge end.wrapped end macro block name end macro block a block b end block end block wrapped x wrapped y end wrapped end wrapped |
|||
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2026, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.