Table of Contents

5.4.2 Control Statements

Note

This section describes the implementation of MS-VBAL §5.4.2 Control Statements.

A control statement's effect on the flow of execution is carried by the instruction it lowers to. A statement's own runtime semantics are pure: they evaluate operands and return a result, and never mutate control state. The InstructionKind and the pre-resolved offsets on Instruction let the executor's fetch/decode loop decide whether to branch (RD-VBAL §3.5.2 Instruction).

A block statement is kept structured. Each of its headers remains an instruction of its own, and only the control effects between them (a branch's fall-through-versus-skip choice, a loop's back-edge) are pre-resolved offsets (RD-VBAL §3.5.3 Lowering Block Statements).

Statements

Statement AST node(s) Instruction kind(s)
RD-VBAL §5.4.2.1 Call Statement CallStatementNode Simple
RD-VBAL §5.4.2.2 While Statement WhileWendStatementNode ConditionalBranch, Jump
RD-VBAL §5.4.2.3 For Statement ForStatementNode ForOpener, ForNext
RD-VBAL §5.4.2.4 For Each Statement ForEachStatementNode ForEachOpener, ForEachNext
RD-VBAL §5.4.2.5 Exit For Statement KeywordStatementNode (Token: "Exit For") ExitLoop
RD-VBAL §5.4.2.6 Do Statement DoLoopStatementNode, DoWhileLoopStatementNode, DoUntilLoopStatementNode, DoLoopWhileStatementNode, DoLoopUntilStatementNode ConditionalBranch, LoopBack, Jump
RD-VBAL §5.4.2.7 Exit Do Statement KeywordStatementNode (Token: "Exit Do") ExitLoop
RD-VBAL §5.4.2.8 If Statement IfBlockStatementNode, ElseIfBlockStatementNode, ElseBlockStatementNode ConditionalBranch, Jump
RD-VBAL §5.4.2.9 Single-line If Statement InlineIfStatementNode ConditionalBranch
RD-VBAL §5.4.2.10 Select Case Statement SelectCaseStatementNode, CaseExpressionStatementNode, CaseElseClauseStatementNode Select, ConditionalBranch, Jump
RD-VBAL §5.4.2.11 Stop Statement KeywordStatementNode (Token: Stop) Break
RD-VBAL §5.4.2.12 GoTo Statement GoToStatementNode Jump
RD-VBAL §5.4.2.13 On...GoTo Statement OnGoToStatementNode JumpTable
RD-VBAL §5.4.2.14 GoSub Statement GoSubStatementNode GoSub
RD-VBAL §5.4.2.15 Return Statement ReturnStatementNode Return
RD-VBAL §5.4.2.16 On...GoSub Statement OnGoSubStatementNode GoSubTable
RD-VBAL §5.4.2.17 Exit Sub Statement KeywordStatementNode (Token: "Exit Sub") ExitProcedure
RD-VBAL §5.4.2.18 Exit Function Statement KeywordStatementNode (Token: "Exit Function") ExitProcedure
RD-VBAL §5.4.2.19 Exit Property Statement KeywordStatementNode (Token: "Exit Property") ExitProcedure
RD-VBAL §5.4.2.20 RaiseEvent Statement KeywordStatementNode (Token: RaiseEvent) Simple
RD-VBAL §5.4.2.21 With Statement WithStatementNode With
RD-VBAL §5.4.2.22 End Statement KeywordStatementNode (Token: End) Halt
RD-VBAL §5.4.2.23 Assert Statement — —

For a block statement, a Jump in the table above is the synthesized trailing jump of a branch, or a loop's back-edge. See RD-VBAL §3.4.1 Block Statements, RD-VBAL §3.4.2 Simple Statements and RD-VBAL §3.5.2 Instruction for the complete node and instruction catalogues.


⏮️ RD-VBAL §5.4.1.2 Rem Statement | ⏭️ RD-VBAL §5.4.2.1 Call Statement