From c7f8dc29ea3b4307d35d1f38596ba970af9318fd Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Mon, 2 Nov 2020 22:51:55 -0700 Subject: add flow control statements --- language/statements/flow-control.rst | 38 ++++++++++++++++++++++++++++++++++++ language/statements/index.rst | 1 + 2 files changed, 39 insertions(+) create mode 100644 language/statements/flow-control.rst (limited to 'language') diff --git a/language/statements/flow-control.rst b/language/statements/flow-control.rst new file mode 100644 index 0000000..9b21338 --- /dev/null +++ b/language/statements/flow-control.rst @@ -0,0 +1,38 @@ +Flow Control Statements +^^^^^^^^^^^^^^^^^^^^^^^ + +.. crowbar:element:: FlowControlStatement <- ContinueStatement / BreakStatement / ReturnStatement + +.. crowbar:element:: ContinueStatement <- 'continue' ';' + + Compile-time Behavior: + + Only valid inside a :crowbar:ref:`WhileStatement`, :crowbar:ref:`DoWhileStatement`, or :crowbar:ref:`ForStatement` block. + + Runtime Behavior: + + When a continue statement is executed, the innermost loop statement (while, do-while, or for) that contains the continue statement skips the remainder of the execution of its block. + For a while or do-while loop, this means skipping to the condition. + For a for loop, this means skipping to the update assignments. + +.. crowbar:element:: BreakStatement <- 'break' ';' + + Compile-time Behavior: + + Only valid inside a :crowbar:ref:`WhileStatement`, :crowbar:ref:`DoWhileStatement`, or :crowbar:ref:`ForStatement` block. + + Runtime Behavior: + + When a break statement is executed, the innermost loop statement (while, do-while, or for) that contains the break statement ends entirely, skipping any remaining statements, condition tests, or updates. + +.. crowbar:element:: ReturnStatement <- 'return' Expression? ';' + + Compile-time Behavior: + + The expression provided must have a type matching the return type of the containing function. + If the function has a return type of ``void``, the expression must be omitted. + + Runtime Behavior: + + When a return statement with an expression is executed, the expression is evaluated, and the containing function returns with the value obtained from this evaluation. + When a return statement with no expression is executed, the containing function returns. diff --git a/language/statements/index.rst b/language/statements/index.rst index e0a0a37..696c059 100644 --- a/language/statements/index.rst +++ b/language/statements/index.rst @@ -21,3 +21,4 @@ Statements variables structure + flow-control -- cgit v1.2.3