static void emit_decl_init(List *inits, int off) { Iter *iter = list_iter(inits); while (!iter_end(iter)) { Node *node = iter_next(iter); assert(node->type == AST_INIT); if (node->initval->type == AST_LITERAL && node->totype->bitsize <= 0) { emit_save_literal(node->initval, node->totype, node->initoff + off); } else { emit_expr(node->initval); emit_lsave(node->totype, node->initoff + off); } } }
static void emit_decl_init(Vector *inits, int off, int totalsize) { emit_fill_holes(inits, off, totalsize); for (int i = 0; i < vec_len(inits); i++) { Node *node = vec_get(inits, i); assert(node->kind == AST_INIT); bool isbitfield = (node->totype->bitsize > 0); if (node->initval->kind == AST_LITERAL && !isbitfield) { emit_save_literal(node->initval, node->totype, node->initoff + off); } else { emit_expr(node->initval); emit_lsave(node->totype, node->initoff + off); } } }