From 5f78969d4a71908fd8ae43c886614ef0e5664eb0 Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Mon, 2 Nov 2020 20:52:52 -0700 Subject: define switch statement --- language/statements/structure.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'language/statements/structure.rst') diff --git a/language/statements/structure.rst b/language/statements/structure.rst index 9330bf6..1a412af 100644 --- a/language/statements/structure.rst +++ b/language/statements/structure.rst @@ -19,3 +19,23 @@ Structure Statements First, the expression is evaluated. If the expression evaluates to a ``bool`` value of ``true``, then the first block will be executed. If the expression evaluates to a ``bool`` value of ``false``, either the second block is executed or nothing is executed. + +.. crowbar.element.. SwitchStatement <- 'switch' '(' Expression ')' '{' (CaseSpecifier / Statement)+ '}' + CaseSpecifier <- 'case' Expression ':' / 'default' ':' + + A switch statement allows many different actions to be taken depending on the value of some expression. + + Compile-time Behavior: + + The expression must have a type which is either some integer type or an enum. + The expression in a case specifier must have a value which can always be known at compile time, i.e. its value must be a constant or computed from only constants. + Either there must be a case specifier for every valid value in the type of the switch expression, or there must be a default case specifier. + At most one default case may be present. + + Runtime Behavior: + + First, the switch expression is evaluated. + Whichever case specifier has the same value, or the default case specifier if none is found, is then selected as the matching case specifier. + Any case specifiers immediately following the matching case specifier is ignored. + Subsequent statements are then executed, in linear order, until another case specifier is reached. + The execution of the switch statement then ends. -- cgit v1.2.3