-
Notifications
You must be signed in to change notification settings - Fork 248
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
feat(experimental): Support struct constructors in match patterns #7489
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! It would be nice to have tests for each of the errors that happen here (duplicate field, no such field, etc.)
Added tests along with a separate quick fix that I found while writing the tests. We were erroring with "variable already defined in pattern" when a pattern used |
* master: feat(experimental): Support struct constructors in match patterns (#7489) feat: use resolved type instead of needing Constructor.struct_type (#7500) feat: better error message when keyword is found instead of type in p… (#7501) chore: bump external pinned commits (#7497) feat(experimental): Add invalid pattern syntax error (#7487) fix(performance): Accurately mark safe constant indices for arrays of complex types (#7491)
* master: (74 commits) feat: optimize out range checks on limiting cases (#7510) chore: clippy fixes (#7505) chore(docs): Supplement docs on `modexp` as a required precompile for Barretenberg's Solidity verifier (#7508) feat(debugger): REPL add breakpoint by sourcecode line (#5204) fix: issue duplicate error on impl function without self (#7490) feat(experimental): Support struct constructors in match patterns (#7489) feat: use resolved type instead of needing Constructor.struct_type (#7500) feat: better error message when keyword is found instead of type in p… (#7501) chore: bump external pinned commits (#7497) feat(experimental): Add invalid pattern syntax error (#7487) fix(performance): Accurately mark safe constant indices for arrays of complex types (#7491) fix(experimental): Allow shadowing in match patterns (#7484) chore: regression test #7195 (#7233) chore(docs): Section on `noir-profiler execution-opcodes` (#7480) chore: improve proptesting of 128bit values in `noirc_abi` (#7485) chore(profiler): Use brillig names for outputted flamegraphs (#7470) chore(docs): Profiler images reference (#7481) fix: don't use dummy location when inserting debug code (#7482) feat(cli)!: Add `--unstable-features` to gate unstable features (#7449) feat: Sync from aztec-packages (#7474) ...
feat: let all compiler errors carry a Location instead of a Span (noir-lang/noir#7486) chore: Increaes base64's allotted time (noir-lang/noir#7521) fix: don't crash on broken impl syntax (noir-lang/noir#7512) feat: optimize out range checks on limiting cases (noir-lang/noir#7510) chore: clippy fixes (noir-lang/noir#7505) chore(docs): Supplement docs on `modexp` as a required precompile for Barretenberg's Solidity verifier (noir-lang/noir#7508) feat(debugger): REPL add breakpoint by sourcecode line (noir-lang/noir#5204) fix: issue duplicate error on impl function without self (noir-lang/noir#7490) feat(experimental): Support struct constructors in match patterns (noir-lang/noir#7489) feat: use resolved type instead of needing Constructor.struct_type (noir-lang/noir#7500) feat: better error message when keyword is found instead of type in p… (noir-lang/noir#7501) chore: bump external pinned commits (noir-lang/noir#7497) feat(experimental): Add invalid pattern syntax error (noir-lang/noir#7487) fix(performance): Accurately mark safe constant indices for arrays of complex types (noir-lang/noir#7491) fix(experimental): Allow shadowing in match patterns (noir-lang/noir#7484) chore: regression test #7195 (noir-lang/noir#7233) chore(docs): Section on `noir-profiler execution-opcodes` (noir-lang/noir#7480) chore: improve proptesting of 128bit values in `noirc_abi` (noir-lang/noir#7485) chore(profiler): Use brillig names for outputted flamegraphs (noir-lang/noir#7470) chore(docs): Profiler images reference (noir-lang/noir#7481) fix: don't use dummy location when inserting debug code (noir-lang/noir#7482) feat(cli)!: Add `--unstable-features` to gate unstable features (noir-lang/noir#7449)
Automated pull of development from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: bump external pinned commits (noir-lang/noir#7515) feat: let all compiler errors carry a Location instead of a Span (noir-lang/noir#7486) chore: Increaes base64's allotted time (noir-lang/noir#7521) fix: don't crash on broken impl syntax (noir-lang/noir#7512) feat: optimize out range checks on limiting cases (noir-lang/noir#7510) chore: clippy fixes (noir-lang/noir#7505) chore(docs): Supplement docs on `modexp` as a required precompile for Barretenberg's Solidity verifier (noir-lang/noir#7508) feat(debugger): REPL add breakpoint by sourcecode line (noir-lang/noir#5204) fix: issue duplicate error on impl function without self (noir-lang/noir#7490) feat(experimental): Support struct constructors in match patterns (noir-lang/noir#7489) feat: use resolved type instead of needing Constructor.struct_type (noir-lang/noir#7500) feat: better error message when keyword is found instead of type in p… (noir-lang/noir#7501) chore: bump external pinned commits (noir-lang/noir#7497) feat(experimental): Add invalid pattern syntax error (noir-lang/noir#7487) fix(performance): Accurately mark safe constant indices for arrays of complex types (noir-lang/noir#7491) fix(experimental): Allow shadowing in match patterns (noir-lang/noir#7484) chore: regression test #7195 (noir-lang/noir#7233) chore(docs): Section on `noir-profiler execution-opcodes` (noir-lang/noir#7480) chore: improve proptesting of 128bit values in `noirc_abi` (noir-lang/noir#7485) chore(profiler): Use brillig names for outputted flamegraphs (noir-lang/noir#7470) chore(docs): Profiler images reference (noir-lang/noir#7481) fix: don't use dummy location when inserting debug code (noir-lang/noir#7482) feat(cli)!: Add `--unstable-features` to gate unstable features (noir-lang/noir#7449) END_COMMIT_OVERRIDE --------- Co-authored-by: guipublic <[email protected]> Co-authored-by: guipublic <[email protected]>
Description
Problem*
Resolves #7431
Summary*
Implements structs in match patterns
Additional Context
There's some mostly unavoidable duplication involving checking for missing/duplicate fields when converting constructor expressions to a pattern. I think abstracting this to work with the existing already abstracted code to do so converting constructors to HirExpressions would result in less readable code.
Documentation*
Check one:
PR Checklist*
cargo fmt
on default settings.