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

Split out the Option and Expected types from Variant #215

Merged
merged 3 commits into from
May 5, 2022

Conversation

alexcrichton
Copy link
Member

This commit is like prior PRs to split out specializations of types into
their own AST type to avoid conflicting with the main type (in this case
variant). I originally thought these two types would be relatively
simple but this is probably one of the more complicated transitions, as
evidenced by the lines changed here. The main churn was that variants
already have a significant amount of code to support them and this is in
some places "duplicating" code for option/expected and in other cases
splitting what was already an if/else.

Overall I think that the generated code gets a little better since it's
clear when something is and option vs expected now rather than
trying to have everything shoehorned into one. Notably the C code
generator now generates descriptive fields like bool is_some or bool is_err instead of a bland uint8_t tag with some comments about how to
use it.

This commit is like prior PRs to split out specializations of types into
their own AST type to avoid conflicting with the main type (in this case
`variant`). I originally thought these two types would be relatively
simple but this is probably one of the more complicated transitions, as
evidenced by the lines changed here. The main churn was that variants
already have a significant amount of code to support them and this is in
some places "duplicating" code for option/expected and in other cases
splitting what was already an if/else.

Overall I think that the generated code gets a little better since it's
clear when something is and `option` vs `expected` now rather than
trying to have everything shoehorned into one. Notably the C code
generator now generates descriptive fields like `bool is_some` or `bool
is_err` instead of a bland `uint8_t tag` with some comments about how to
use it.
@alexcrichton alexcrichton mentioned this pull request May 3, 2022
21 tasks
@peterhuene peterhuene self-requested a review May 4, 2022 17:29
... as these are separate variants now.
Copy link
Member

@peterhuene peterhuene left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few comments and a bug spotted in the wit-component encoding implementation.

crates/gen-c/src/lib.rs Outdated Show resolved Hide resolved
crates/gen-c/src/lib.rs Outdated Show resolved Hide resolved
crates/parser/src/abi.rs Outdated Show resolved Hide resolved
crates/parser/src/abi.rs Outdated Show resolved Hide resolved
crates/wasmlink/tests/run.rs Outdated Show resolved Hide resolved
@alexcrichton alexcrichton merged commit 51af112 into bytecodealliance:main May 5, 2022
@alexcrichton alexcrichton deleted the option-type branch May 5, 2022 15:53
willemneal pushed a commit to AhaLabs/wit-bindgen that referenced this pull request May 31, 2022
…lliance#215)

* Split out the `Option` and `Expected` types from `Variant`

This commit is like prior PRs to split out specializations of types into
their own AST type to avoid conflicting with the main type (in this case
`variant`). I originally thought these two types would be relatively
simple but this is probably one of the more complicated transitions, as
evidenced by the lines changed here. The main churn was that variants
already have a significant amount of code to support them and this is in
some places "duplicating" code for option/expected and in other cases
splitting what was already an if/else.

Overall I think that the generated code gets a little better since it's
clear when something is and `option` vs `expected` now rather than
trying to have everything shoehorned into one. Notably the C code
generator now generates descriptive fields like `bool is_some` or `bool
is_err` instead of a bland `uint8_t tag` with some comments about how to
use it.

* Remove `Variant::as_{option,expected}`

... as these are separate variants now.

* Review comments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants