+static ir_initializer_t *read_initializer(io_env_t *env)
+{
+ FILE *f = env->file;
+ ir_initializer_kind_t ini_kind = read_initializer_kind(env);
+
+ switch(ini_kind)
+ {
+ case IR_INITIALIZER_CONST:
+ {
+ ir_node *irn = get_node_or_dummy(env, read_long(env));
+ return create_initializer_const(irn);
+ }
+
+ case IR_INITIALIZER_TARVAL:
+ return create_initializer_tarval(read_tv(env));
+
+ case IR_INITIALIZER_NULL:
+ return get_initializer_null();
+
+ case IR_INITIALIZER_COMPOUND:
+ {
+ unsigned i, n = (unsigned) read_long(env);
+ ir_initializer_t *ini = create_initializer_compound(n);
+ for(i = 0; i < n; i++)
+ {
+ ir_initializer_t *curini = read_initializer(env);
+ set_initializer_compound_value(ini, i, curini);
+ }
+ return ini;
+ }
+
+ default:
+ panic("Unknown initializer kind");
+ }
+}
+
+