type = skip_typeref(type);
switch(type->kind) {
+ case TYPE_ERROR:
+ panic("error type occured");
case TYPE_ATOMIC:
return get_atomic_type_size(&type->atomic);
case TYPE_ENUM:
size_t align_all = 1;
size_t offset = 0;
size_t bit_offset = 0;
- declaration_t *entry = type->declaration->context.declarations;
+ declaration_t *entry = type->declaration->scope.declarations;
for( ; entry != NULL; entry = entry->next) {
if(entry->namespc != NAMESPACE_NORMAL)
continue;
int align_all = 1;
int size = 0;
- declaration_t *entry = declaration->context.declarations;
+ declaration_t *entry = declaration->scope.declarations;
for( ; entry != NULL; entry = entry->next) {
if(entry->namespc != NAMESPACE_NORMAL)
continue;
ir_type *firm_type = NULL;
switch(type->kind) {
+ case TYPE_ERROR:
+ panic("error type occured");
case TYPE_ATOMIC:
firm_type = create_atomic_type(&type->atomic);
break;
{
declaration_t *compound_declaration = type->declaration;
- declaration_t *compound_entry = compound_declaration->context.declarations;
+ declaration_t *compound_entry = compound_declaration->scope.declarations;
compound_graph_path_entry_t entry;
entry.type = COMPOUND_GRAPH_ENTRY_COMPOUND;
ir_node *result = NULL;
statement_t *statement = compound->statements;
for( ; statement != NULL; statement = statement->base.next) {
- //context2firm(&statement->context);
+ //context2firm(&statement->scope);
if(statement->base.next == NULL
&& statement->kind == STATEMENT_EXPRESSION) {
}
/* create declarations */
- declaration_t *declaration = statement->context.declarations;
+ declaration_t *declaration = statement->scope.declarations;
for( ; declaration != NULL; declaration = declaration->next) {
create_local_declaration(declaration);
}
current_switch_cond = cond;
break_label = break_block;
- statement_to_firm(statement->body);
+ if (statement->body != NULL) {
+ statement_to_firm(statement->body);
+ }
if(get_cur_block() != NULL) {
ir_node *jmp = new_Jmp();
case STATEMENT_FOR: {
const for_statement_t *const for_stmt = &stmt->fors;
- count += count_local_declarations(for_stmt->context.declarations, NULL);
+ 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);
int count = 0;
/* count parameters */
- count += count_local_declarations(declaration->context.declarations, NULL);
+ count += count_local_declarations(declaration->scope.declarations, NULL);
/* count local variables declared in body */
count += count_decls_in_stmts(declaration->init.statement);
ir_type *function_irtype = get_ir_type(declaration->type);
int n = 0;
- declaration_t *parameter = declaration->context.declarations;
+ declaration_t *parameter = declaration->scope.declarations;
for( ; parameter != NULL; parameter = parameter->next, ++n) {
assert(parameter->declaration_kind == DECLARATION_KIND_UNKNOWN);
type_t *type = skip_typeref(parameter->type);
panic("Invalid storage class for global variable");
}
-static void context_to_firm(context_t *context)
+static void scope_to_firm(scope_t *scope)
{
/* first pass: create declarations */
- declaration_t *declaration = context->declarations;
+ declaration_t *declaration = scope->declarations;
for( ; declaration != NULL; declaration = declaration->next) {
if(declaration->namespc != NAMESPACE_NORMAL)
continue;
}
/* second pass: create code */
- declaration = context->declarations;
+ declaration = scope->declarations;
for( ; declaration != NULL; declaration = declaration->next) {
if(declaration->namespc != NAMESPACE_NORMAL)
continue;
break_label = NULL;
current_switch_cond = NULL;
- context_to_firm(&unit->context);
+ scope_to_firm(&unit->scope);
}