Browse Source

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.
tags/mesa-7.9-rc1
Ian Romanick 15 years ago
parent
commit
4f9d72fa9e
1 changed files with 6 additions and 21 deletions
  1. 6
    21
      ast_to_hir.cpp

+ 6
- 21
ast_to_hir.cpp View File

@@ -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…
Cancel
Save