aboutsummaryrefslogtreecommitdiff
path: root/language/statements/structure.rst
diff options
context:
space:
mode:
Diffstat (limited to 'language/statements/structure.rst')
-rw-r--r--language/statements/structure.rst20
1 files changed, 20 insertions, 0 deletions
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.