This is correct code:
if a then (x)(2) end
This isn't:
if a (x)(2) end
Ok, that certainly explains why testnext() isn't the default behavior :)
As best as I can tell, the patch implies that an implicit "then" is placed at the end of the maximally long complete _expression_ immediately following the if? So, "if (a) (x)(2) end" becomes an abbreviation for "if (a)(x)(2) then end"?
That's a little dangerous, but, compared to the sorts of obscure parse rules people have gotten used to dealing with in C++, it doesn't seem that bad... Maybe the patch is still worth posting on the wiki, provided an appropriate warning about the occasional need to use an explicit "then" to break up potentially ambiguous sequences of expressions?