mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 16:20:13 +01:00
Loop bodies, then-statements, and else-statements are not lists
The statement making up a loop body, a then-statement, or an else-statement are single nodes. If the statement is a block, the single node will be an ast_compound_statement. There is no need to loop at the top level when processing these statements.
This commit is contained in:
parent
f4e06981cc
commit
4f9d72fa9e
1 changed files with 6 additions and 21 deletions
|
|
@ -2171,21 +2171,11 @@ ast_selection_statement::hir(exec_list *instructions,
|
|||
|
||||
ir_if *const stmt = new ir_if(condition);
|
||||
|
||||
if (then_statement != NULL) {
|
||||
ast_node *node = (ast_node *) then_statement;
|
||||
do {
|
||||
node->hir(& stmt->then_instructions, state);
|
||||
node = (ast_node *) node->next;
|
||||
} while (node != then_statement);
|
||||
}
|
||||
if (then_statement != NULL)
|
||||
then_statement->hir(& stmt->then_instructions, state);
|
||||
|
||||
if (else_statement != NULL) {
|
||||
ast_node *node = (ast_node *) else_statement;
|
||||
do {
|
||||
node->hir(& stmt->else_instructions, state);
|
||||
node = (ast_node *) node->next;
|
||||
} while (node != else_statement);
|
||||
}
|
||||
if (else_statement != NULL)
|
||||
else_statement->hir(& stmt->else_instructions, state);
|
||||
|
||||
instructions->push_tail(stmt);
|
||||
|
||||
|
|
@ -2252,13 +2242,8 @@ ast_iteration_statement::hir(exec_list *instructions,
|
|||
if (mode != ast_do_while)
|
||||
condition_to_hir(stmt, state);
|
||||
|
||||
if (body != NULL) {
|
||||
ast_node *node = (ast_node *) body;
|
||||
do {
|
||||
node->hir(& stmt->body_instructions, state);
|
||||
node = (ast_node *) node->next;
|
||||
} while (node != body);
|
||||
}
|
||||
if (body != NULL)
|
||||
body->hir(& stmt->body_instructions, state);
|
||||
|
||||
if (rest_expression != NULL)
|
||||
rest_expression->hir(& stmt->body_instructions, state);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue