Loop bodies, then-statements, and else-statements are not lists
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 10 May 2010 18:10:26 +0000 (11:10 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 10 May 2010 18:10:26 +0000 (11:10 -0700)
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.

ast_to_hir.cpp

index 357683f..427158c 100644 (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);