More error propagation

If a sub-expression `semantic` generates an `ErrorExp`, it should not be stored in the AST.

This change is not perfect, but in many cases diagnostic message will be improved.