diff options
author | Melody Horn <melody@boringcactus.com> | 2020-11-02 20:52:52 -0700 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2020-11-02 20:52:52 -0700 |
commit | 5f78969d4a71908fd8ae43c886614ef0e5664eb0 (patch) | |
tree | 68bdb6af363c9732064f1e536fa23c1569862261 /language/statements | |
parent | d17e0f73a57eb65c82eb942bf4b33e3c6d8335c3 (diff) | |
download | spec-5f78969d4a71908fd8ae43c886614ef0e5664eb0.tar.gz spec-5f78969d4a71908fd8ae43c886614ef0e5664eb0.zip |
define switch statement
Diffstat (limited to 'language/statements')
-rw-r--r-- | language/statements/index.rst | 2 | ||||
-rw-r--r-- | language/statements/structure.rst | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/language/statements/index.rst b/language/statements/index.rst index 38bfbb1..e0a0a37 100644 --- a/language/statements/index.rst +++ b/language/statements/index.rst @@ -12,7 +12,7 @@ Statements When a block is executed, each of the containing statements, in linear order, is executed. -.. crowbar:element:: Statement <- VariableDefinition / StructureStatement / FlowControlStatement / AssignmentStatement / FragileStatement / ExpressionStatement +.. crowbar:element:: Statement <- VariableDefinition / StructureStatement / FlowControlStatement / AssignmentStatement / FragileStatement / ExpressionStatement / EmptyStatement Crowbar has many different types of statement. 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. |