case STORAGE_CLASS_AUTO:
case STORAGE_CLASS_REGISTER:
if(is_type_function(type)) {
- panic("nested functions not supported yet");
+ if(declaration->init.statement != NULL) {
+ panic("nested functions not supported yet");
+ } else {
+ get_function_entity(declaration);
+ }
} else {
create_local_variable(declaration);
}
}
EXPR_UNARY_CASES
return count_decls_in_expression(expression->unary.value);
+ case EXPR_CALL: {
+ int count = 0;
+ call_argument_t *argument = expression->call.arguments;
+ for( ; argument != NULL; argument = argument->next) {
+ count += count_decls_in_expression(argument->expression);
+ }
+ return count;
+ }
default:
break;
var_type);
set_entity_visibility(declaration->v.entity, vis);
- current_ir_graph = get_const_code_irg();
- create_initializer(declaration);
return;
case STORAGE_CLASS_TYPEDEF:
}
}
- /* second pass: create code */
+ /* second pass: create code/initializers */
declaration = scope->declarations;
for( ; declaration != NULL; declaration = declaration->next) {
if(declaration->namespc != NAMESPACE_NORMAL)
continue;
type_t *type = declaration->type;
- if(type->kind != TYPE_FUNCTION)
- continue;
-
- create_function(declaration);
+ if(type->kind == TYPE_FUNCTION) {
+ create_function(declaration);
+ } else {
+ assert(declaration->declaration_kind
+ == DECLARATION_KIND_GLOBAL_VARIABLE);
+ current_ir_graph = get_const_code_irg();
+ create_initializer(declaration);
+ }
}
}