| # Compound Statements | |
| Compound statements are statements that can hold other statements. | |
| This document maps the WGSL compound statements to their semantic tree representations. | |
| ## if statement | |
| WGSL: | |
| ``` | |
| if (condition_a) { | |
| statement_a; | |
| } else if (condition_b) { | |
| statement_b; | |
| } else { | |
| statement_c; | |
| } | |
| ``` | |
| Semantic tree: | |
| ``` | |
| sem::IfStatement { | |
| condition_a | |
| sem::BlockStatement { | |
| statement_a | |
| } | |
| sem::IfStatement { | |
| condition_b | |
| sem::BlockStatement { | |
| statement_b | |
| } | |
| sem::BlockStatement { | |
| statement_c | |
| } | |
| } | |
| } | |
| ``` | |
| ## for loop | |
| WGSL: | |
| ``` | |
| for (initializer; condition; continuing) { | |
| statement; | |
| } | |
| ``` | |
| Semantic tree: | |
| ``` | |
| sem::ForLoopStatement { | |
| sem::Statement initializer | |
| sem::Expression condition | |
| sem::Statement continuing | |
| sem::LoopBlockStatement { | |
| sem::Statement statement | |
| } | |
| } | |
| ``` | |
| ## while | |
| WGSL: | |
| ``` | |
| while (condition) { | |
| statement; | |
| } | |
| ``` | |
| Semantic tree: | |
| ``` | |
| sem::WhileStatement { | |
| sem::Expression condition | |
| sem::LoopBlockStatement { | |
| sem::Statement statement | |
| } | |
| } | |
| ``` | |
| ## loop | |
| WGSL: | |
| ``` | |
| loop (condition) { | |
| statement_a; | |
| continuing { | |
| statement_b; | |
| } | |
| } | |
| ``` | |
| Semantic tree: | |
| ``` | |
| sem::LoopStatement { | |
| sem::Expression condition | |
| sem::LoopBlockStatement { | |
| sem::Statement statement_a | |
| sem::LoopContinuingBlockStatement { | |
| sem::Statement statement_b | |
| } | |
| } | |
| } | |
| ``` | |
| ## switch statement | |
| WGSL: | |
| ``` | |
| switch (condition) { | |
| case literal_a, literal_b: { | |
| statement_a; | |
| } | |
| default { | |
| statement_b; | |
| } | |
| } | |
| ``` | |
| Semantic tree: | |
| ``` | |
| sem::SwitchStatement { | |
| sem::Expression condition | |
| sem::CaseStatement { | |
| sem::BlockStatement { | |
| sem::Statement statement_a | |
| } | |
| } | |
| sem::CaseStatement { | |
| sem::BlockStatement { | |
| sem::Statement statement_b | |
| } | |
| } | |
| } | |
| ``` |