finally separate yield_context from push_context