pass through generator functions

It probably makes sense to implement `yield` as a separate pass