- }
-
- /* TODO FIXME: finish/fix that firm patch that allows dynamic value numbers
- * (or implement all the missing expressions here/implement a walker)
- */
-
- return 0;
-}
-
-static int count_decls_in_stmts(const statement_t *stmt)
-{
- int count = 0;
- for (; stmt != NULL; stmt = stmt->base.next) {
- switch (stmt->kind) {
- case STATEMENT_EMPTY:
- break;
-
- case STATEMENT_DECLARATION: {
- const declaration_statement_t *const decl_stmt = &stmt->declaration;
- count += count_local_declarations(decl_stmt->declarations_begin,
- decl_stmt->declarations_end->next);
- break;
- }
-
- case STATEMENT_COMPOUND: {
- const compound_statement_t *const comp =
- &stmt->compound;
- count += count_decls_in_stmts(comp->statements);
- break;
- }
-
- case STATEMENT_IF: {
- const if_statement_t *const if_stmt = &stmt->ifs;
- count += count_decls_in_expression(if_stmt->condition);
- count += count_decls_in_stmts(if_stmt->true_statement);
- count += count_decls_in_stmts(if_stmt->false_statement);
- break;
- }
-
- case STATEMENT_SWITCH: {
- const switch_statement_t *const switch_stmt = &stmt->switchs;
- count += count_decls_in_expression(switch_stmt->expression);
- count += count_decls_in_stmts(switch_stmt->body);
- break;
- }
-
- case STATEMENT_LABEL: {
- const label_statement_t *const label_stmt = &stmt->label;
- if (label_stmt->statement != NULL) {
- count += count_decls_in_stmts(label_stmt->statement);
- }
- break;
- }
-
- case STATEMENT_WHILE: {
- const while_statement_t *const while_stmt = &stmt->whiles;
- count += count_decls_in_expression(while_stmt->condition);
- count += count_decls_in_stmts(while_stmt->body);
- break;
- }
-
- case STATEMENT_DO_WHILE: {
- const do_while_statement_t *const do_while_stmt = &stmt->do_while;
- count += count_decls_in_expression(do_while_stmt->condition);
- count += count_decls_in_stmts(do_while_stmt->body);
- break;
- }
-
- case STATEMENT_FOR: {
- const for_statement_t *const for_stmt = &stmt->fors;
- count += count_local_declarations(for_stmt->scope.declarations, NULL);
- count += count_decls_in_expression(for_stmt->initialisation);
- count += count_decls_in_expression(for_stmt->condition);
- count += count_decls_in_expression(for_stmt->step);
- count += count_decls_in_stmts(for_stmt->body);
- break;
- }
-
- case STATEMENT_CASE_LABEL: {
- const case_label_statement_t *label = &stmt->case_label;
- count += count_decls_in_expression(label->expression);
- if (label->statement != NULL) {
- count += count_decls_in_stmts(label->statement);
- }
- break;
- }
-
- case STATEMENT_ASM:
- case STATEMENT_BREAK:
- case STATEMENT_CONTINUE:
- break;
-
- case STATEMENT_EXPRESSION: {
- const expression_statement_t *expr_stmt = &stmt->expression;
- count += count_decls_in_expression(expr_stmt->expression);
- break;
- }
-
- case STATEMENT_GOTO:
- case STATEMENT_LEAVE:
- case STATEMENT_INVALID:
- break;