return;
case EXPR_UNKNOWN:
- case EXPR_INVALID:
panic("unexpected expr kind");
case EXPR_COMPOUND_LITERAL:
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);
return;
}
+ case EXPR_INVALID:
case EXPR_OFFSETOF:
case EXPR_REFERENCE:
case EXPR_REFERENCE_ENUM_VALUE:
}
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;
if (initializer != NULL) {
walk_initializer(initializer, callback, env);
}
+
+ if (entity == last)
+ break;
}
}
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:
walk_statements(stmt->ms_try.final_statement, callback, env);
return;
- case STATEMENT_LOCAL_LABEL:
case STATEMENT_INVALID:
case STATEMENT_EMPTY:
case STATEMENT_CONTINUE: