+static void create_initializer_array(initializer_list_t *initializer,
+ array_type_t *type, ir_entity *entity,
+ compound_graph_path_entry_t *last_entry,
+ int len)
+{
+ type_t *element_type = type->element_type;
+ element_type = skip_typeref(element_type);
+
+ compound_graph_path_entry_t entry;
+ entry.type = COMPOUND_GRAPH_ENTRY_ARRAY;
+ entry.prev = last_entry;
+ ++len;
+
+ size_t i;
+ for(i = 0; i < initializer->len; ++i) {
+ entry.v.array_index = i;
+
+ initializer_t *sub_initializer = initializer->initializers[i];
+
+ if(sub_initializer->type == INITIALIZER_VALUE) {
+ create_initializer_value(&sub_initializer->value,
+ entity, &entry, len);
+ } else {
+ create_initializer_object(sub_initializer, element_type, entity,
+ &entry, len);
+ }
+ }
+
+#if 0
+ /* TODO: initialize rest... */
+ if(type->size_expression != NULL) {
+ size_t array_len = fold_constant(type->size_expression);
+ for( ; i < array_len; ++i) {
+
+ }
+ }
+#endif
+}
+
+static void create_initializer_string(initializer_string_t *initializer,
+ array_type_t *type, ir_entity *entity,
+ compound_graph_path_entry_t *last_entry,
+ int len)
+{
+ type_t *element_type = type->element_type;
+ element_type = skip_typeref(element_type);
+
+ compound_graph_path_entry_t entry;
+ entry.type = COMPOUND_GRAPH_ENTRY_ARRAY;
+ entry.prev = last_entry;
+ ++len;
+
+ ir_type *irtype = get_entity_type(entity);
+ size_t arr_len = get_array_type_size(type);
+ const char *p = initializer->string;
+ size_t i = 0;
+ for(i = 0; i < arr_len; ++i, ++p) {
+ entry.v.array_index = i;
+
+ ir_node *node = new_Const_long(mode_Bs, *p);
+ compound_graph_path *path = create_compound_path(irtype, &entry, len);
+ add_compound_ent_value_w_path(entity, node, path);
+
+ if(*p == '\0')
+ break;
+ }
+}
+
+static void create_initializer_object(initializer_t *initializer, type_t *type,
+ ir_entity *entity, compound_graph_path_entry_t *entry, int len)