Skip to content

Commit ee30f98

Browse files
authored
Merge pull request #428 from ehuss/grammar-enum-expr
Grammar: Add enum expression.
2 parents 3705010 + 4be594b commit ee30f98

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

src/expressions/enum-variant-expr.md

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,30 @@
11
# Enumeration Variant expressions
22

3-
Enumeration variants can be constructed similarly to structs, using a path to
4-
an enum variant instead of to a struct:
3+
> **<sup>Syntax</sup>**\
4+
> _EnumerationVariantExpression_ :\
5+
> &nbsp;&nbsp; &nbsp;&nbsp; _EnumExprStruct_\
6+
> &nbsp;&nbsp; | _EnumExprTuple_\
7+
> &nbsp;&nbsp; | _EnumExprFieldless_
8+
>
9+
> _EnumExprStruct_ :\
10+
> &nbsp;&nbsp; [_PathInExpression_] `{` _EnumExprFields_<sup>?</sup> `}`
11+
>
12+
> _EnumExprFields_ :\
13+
> &nbsp;&nbsp; &nbsp;&nbsp; _EnumExprField_ (`,` _EnumExprField_)<sup>\*</sup> `,`<sup>?</sup>
14+
>
15+
> _EnumExprField_ :\
16+
> &nbsp;&nbsp; &nbsp;&nbsp; [IDENTIFIER]\
17+
> &nbsp;&nbsp; | ([IDENTIFIER] | [TUPLE_INDEX]) `:` [_Expression_]
18+
>
19+
> _EnumExprTuple_ :\
20+
> &nbsp;&nbsp; [_PathInExpression_] `(`\
21+
> &nbsp;&nbsp; &nbsp;&nbsp; ( [_Expression_] (`,` [_Expression_])<sup>\*</sup> `,`<sup>?</sup> )<sup>?</sup>\
22+
> &nbsp;&nbsp; `)`
23+
>
24+
> _EnumExprFieldless_ : [_PathInExpression_]
25+
26+
Enumeration variants can be constructed similarly to [structs], using a path to an enum
27+
variant instead of to a struct:
528

629
```rust
730
# enum Message {
@@ -13,3 +36,12 @@ let q = Message::Quit;
1336
let w = Message::WriteString("Some string".to_string());
1437
let m = Message::Move { x: 50, y: 200 };
1538
```
39+
40+
Enum variant expressions have the same syntax, behavior, and restrictions as [struct
41+
expressions][structs], except they do not support base update with the `..` syntax.
42+
43+
[IDENTIFIER]: identifiers.html
44+
[TUPLE_INDEX]: tokens.html#integer-literals
45+
[_Expression_]: expressions.html
46+
[_PathInExpression_]: paths.html#paths-in-expressions
47+
[structs]: expressions/struct-expr.html

0 commit comments

Comments
 (0)