When evaluating outer macro, the "match" line becomes:
match a ={ b, 2 { nop } {
and then the "{ nop }" becomes interpreted as the content of the "match" block, with additional "{" after the block.
You can get around this problem by defining a temporary symbolic variable to hold matched value:
macro xxx [x] {
common local y
y equ x
match a =\{ b, y \{
err
\}
}
xxx 3 { nop }
On a side note, you don't have to use "=" to match "{". And instead of using repeatable argument and "common" block, you can used the new syntax with "&":
macro xxx x& {
local y
y equ x
match a \{ b, y \{
err
\}
}
xxx 3 { nop }