From 4be594beb9c61f6bad355a302b7551d22d77e90d Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Sun, 23 Sep 2018 12:56:59 -0700 Subject: [PATCH] Grammar: Add enum expression. --- src/expressions/enum-variant-expr.md | 36 ++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/expressions/enum-variant-expr.md b/src/expressions/enum-variant-expr.md index 333b909f8..39d3a0ab1 100644 --- a/src/expressions/enum-variant-expr.md +++ b/src/expressions/enum-variant-expr.md @@ -1,7 +1,30 @@ # Enumeration Variant expressions -Enumeration variants can be constructed similarly to structs, using a path to -an enum variant instead of to a struct: +> **Syntax**\ +> _EnumerationVariantExpression_ :\ +>       _EnumExprStruct_\ +>    | _EnumExprTuple_\ +>    | _EnumExprFieldless_ +> +> _EnumExprStruct_ :\ +>    [_PathInExpression_] `{` _EnumExprFields_? `}` +> +> _EnumExprFields_ :\ +>       _EnumExprField_ (`,` _EnumExprField_)\* `,`? +> +> _EnumExprField_ :\ +>       [IDENTIFIER]\ +>    | ([IDENTIFIER] | [TUPLE_INDEX]) `:` [_Expression_] +> +> _EnumExprTuple_ :\ +>    [_PathInExpression_] `(`\ +>       ( [_Expression_] (`,` [_Expression_])\* `,`? )?\ +>    `)` +> +> _EnumExprFieldless_ : [_PathInExpression_] + +Enumeration variants can be constructed similarly to [structs], using a path to an enum +variant instead of to a struct: ```rust # enum Message { @@ -13,3 +36,12 @@ let q = Message::Quit; let w = Message::WriteString("Some string".to_string()); let m = Message::Move { x: 50, y: 200 }; ``` + +Enum variant expressions have the same syntax, behavior, and restrictions as [struct +expressions][structs], except they do not support base update with the `..` syntax. + +[IDENTIFIER]: identifiers.html +[TUPLE_INDEX]: tokens.html#integer-literals +[_Expression_]: expressions.html +[_PathInExpression_]: paths.html#paths-in-expressions +[structs]: expressions/struct-expr.html