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"?