When I execute this program:
use32
macro exp arg
{ match comment=:value, arg \{
display value
\}
}
macro loc arg {
local ..name
match name==val,arg \{
..name dd ?
name equ ..name+INCOOP_PUSHDELTA
\}
if INCOOP_PUSHDELTA<>0
match nme sttype,arg \{
nme equ ..name+INCOOP_PUSHDELTA
\}
end if
}
INCOOP_PUSHDELTA=0
loc a=10
exp zz:[a]
"display" gives out:
[.. name? 0000000+INCOOP_PUSHDELTA+INCOOP_PUSHDELTA]
(I know, that "display" in this form will produce an error - but I need to see the value of "value").
I considered, that if
INCOOP_PUSHDELTA=0 then "if" was not carried out, and value must be equal
"[.. name? 0000000+INCOOP_PUSHDELTA]".
But, if the block "if" to lead to a kind
if INCOOP_PUSHDELTA <> 0
nme equ.. name+INCOOP_PUSHDELTA
end if
than all works as it is necessary!
How it turns out, that "match" works even inside false "if"?