You could maybe do it like
#mfunc foreach(element, list) as "keyword" \
for (var element##_list = list, \
element##_len = array_length(element##_list), \
element##_i = 0, \
element = element##_len ? element##_list[element##_i] : undefined; \
element##_i < element##_len; \
{ if (++element##_i < element##_len) element = element##_list[element##_i] } \
)
to also allow for
foreach (v, [1, 2, 3]) {
trace(v);
}