Improve construct boundary checking (function body vs. tag body)

Function bodies don't require a ';' to follow, so if it's a function body,
the construct ends right behind the '}'. For struct/union/enum bodies on
the other hand we have to scan until the next ';' as always.