# 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 | |
} | |
} | |
} | |
``` |