mirror of
https://github.com/roc-lang/roc.git
synced 2025-12-23 08:48:03 +00:00
Implement ? (question mark) operator for error propagation
The ? operator now desugars expr? to a match expression that unwraps Ok
values and early returns Err values:
match expr {
Ok(#ok) => #ok,
Err(#err) => return Err(#err),
}
Implementation details:
- Use pre-interned identifiers (#ok, #err) for synthetic variables
- Use pre-interned Ok/Err tag names from CommonIdents
- Create applied_tag patterns for Ok and Err
- Build match branches with proper scope isolation
- Mark synthetic patterns as used to avoid unused variable warnings
- Create e_lookup_local, e_tag, and e_return expressions for branch bodies
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
2d8f2e3744
commit
cc3423a709
11 changed files with 176 additions and 444 deletions
19
test/fx/string_pattern_matching.roc
Normal file
19
test/fx/string_pattern_matching.roc
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
app [main!] { pf: platform "./platform/main.roc" }
|
||||
|
||||
import pf.Stdout
|
||||
|
||||
# Tests pattern matching on string literals in match expressions.
|
||||
|
||||
main! = || {
|
||||
greet("Alice")
|
||||
greet("Bob")
|
||||
}
|
||||
|
||||
greet = |name| {
|
||||
message = match name {
|
||||
"Alice" => "Hello Alice!"
|
||||
"Bob" => "Hey Bob!"
|
||||
_ => "Hello stranger!"
|
||||
}
|
||||
Stdout.line!(message)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue