#define mapfor(%0,%1) \
for(new _mpidx = 0, %1; \
_mpidx < Map_Internal_LoopStep(%0, _mpidx) && ((%1 = Map_GetKeyByIndex(%0, _mpidx)) != -1); \
_mpidx++)
_mpidx захардкожен как фиксированное имя. Если написать два вложенных mapfor, оба объявят одну и ту же переменную...