true true. I managed to make a better version. The huge block of code at the end of the for still annoys me tho.
#mfunc foreach(element, list) as "keyword" \
var list##_len = array_length(list); \
if (list##_len <= 0) {} \
else for (var element##_i = 0, element = list[0]; element##_i < list##_len; { element##_i++; if (element##_i < list##_len) element = list[element##_i] })