- change enum to have an underlying atomic type
[cparser] / walk_statements.c
index 9e0c491..ef3c549 100644 (file)
@@ -49,11 +49,16 @@ static void walk_expression(expression_t const *const expr,
                walk_expression(expr->conditional.false_expression, callback, env);
                return;
 
-       case EXPR_BUILTIN_PREFETCH:
-               walk_expression(expr->builtin_prefetch.adr,      callback, env);
-               walk_expression(expr->builtin_prefetch.rw,       callback, env);
-               walk_expression(expr->builtin_prefetch.locality, callback, env);
+       case EXPR_BUILTIN_PREFETCH: {
+               builtin_prefetch_expression_t const *const pf = &expr->builtin_prefetch;
+               walk_expression(pf->adr, callback, env);
+               if (pf->rw != NULL) {
+                       walk_expression(pf->rw, callback, env);
+                       if (pf->locality != NULL)
+                               walk_expression(pf->locality, callback, env);
+               }
                return;
+       }
 
        case EXPR_BUILTIN_CONSTANT_P:
                walk_expression(expr->builtin_constant.value, callback, env);
@@ -116,11 +121,11 @@ static void walk_initializer(const initializer_t  *initializer,
 }
 
 static void walk_declarations(const entity_t*            entity,
-                              const entity_t*      const end,
+                              const entity_t*      const last,
                               statement_callback   const callback,
                               void                *const env)
 {
-       for (; entity != end; entity = entity->base.next) {
+       for (; entity != NULL; entity = entity->base.next) {
                /* we only look at variables */
                if (entity->kind != ENTITY_VARIABLE)
                        continue;
@@ -130,6 +135,9 @@ static void walk_declarations(const entity_t*            entity,
                if (initializer != NULL) {
                        walk_initializer(initializer, callback, env);
                }
+
+               if (entity == last)
+                       break;
        }
 }
 
@@ -197,8 +205,7 @@ void walk_statements(statement_t *const stmt, statement_callback const callback,
 
                case STATEMENT_DECLARATION:
                        walk_declarations(stmt->declaration.declarations_begin,
-                                         stmt->declaration.declarations_end->base.next,
-                                         callback, env);
+                                       stmt->declaration.declarations_end, callback, env);
                        return;
 
                case STATEMENT_MS_TRY:
@@ -206,7 +213,6 @@ void walk_statements(statement_t *const stmt, statement_callback const callback,
                        walk_statements(stmt->ms_try.final_statement, callback, env);
                        return;
 
-               case STATEMENT_LOCAL_LABEL:
                case STATEMENT_INVALID:
                case STATEMENT_EMPTY:
                case STATEMENT_CONTINUE: