Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transform async ResumeTy in generator transform #105977

Merged
merged 1 commit into from
Jan 19, 2023

Commits on Jan 19, 2023

  1. Transform async ResumeTy in generator transform

    - Eliminates all the `get_context` calls that async lowering created.
    - Replace all `Local` `ResumeTy` types with `&mut Context<'_>`.
    
    The `Local`s that have their types replaced are:
    - The `resume` argument itself.
    - The argument to `get_context`.
    - The yielded value of a `yield`.
    
    The `ResumeTy` hides a `&mut Context<'_>` behind an unsafe raw pointer, and the
    `get_context` function is being used to convert that back to a `&mut Context<'_>`.
    
    Ideally the async lowering would not use the `ResumeTy`/`get_context` indirection,
    but rather directly use `&mut Context<'_>`, however that would currently
    lead to higher-kinded lifetime errors.
    See <rust-lang#105501>.
    
    The async lowering step and the type / lifetime inference / checking are
    still using the `ResumeTy` indirection for the time being, and that indirection
    is removed here. After this transform, the generator body only knows about `&mut Context<'_>`.
    Swatinem committed Jan 19, 2023
    Configuration menu
    Copy the full SHA
    96931a7 View commit details
    Browse the repository at this point in the history