`Type::resolve` always set non-NULL to only one of given three pointers. So evaluating `e` is just unnecessary runtime cost (even if it is trivial). I think my code already explains:

1. If `t != NULL`, it is used.
2. If `s != NULL`, and `s->getType() != NULL`, translate `s` to `t` with adding type qualifier.
3. Otherwise, "is not a type" error.

Therefore, sorry, I wouldn't rewrite.