static void emit_data_int(List *inits, int size, int off, int depth) { SAVE; Iter *iter = list_iter(inits); while (!iter_end(iter) && 0 < size) { Node *node = iter_next(iter); Node *v = node->initval; emit_padding(node, off); if (node->totype->bitsize > 0) { assert(node->totype->bitoff == 0); long data = eval_intexpr(v); Ctype *totype = node->totype; while (!iter_end(iter)) { node = iter_next(iter); if (node->totype->bitsize <= 0) { break; } v = node->initval; totype = node->totype; data |= ((((long)1 << totype->bitsize) - 1) & eval_intexpr(v)) << totype->bitoff; } emit_data_primtype(totype, &(Node){ AST_LITERAL, totype, .ival = data }); off += totype->size; size -= totype->size; if (iter_end(iter)) break; } else {
static void do_emit_data(Vector *inits, int size, int off, int depth) { SAVE; for (int i = 0; i < vec_len(inits) && 0 < size; i++) { Node *node = vec_get(inits, i); Node *v = node->initval; emit_padding(node, off); if (node->totype->bitsize > 0) { assert(node->totype->bitoff == 0); long data = eval_intexpr(v, NULL); Type *totype = node->totype; for (i++ ; i < vec_len(inits); i++) { node = vec_get(inits, i); if (node->totype->bitsize <= 0) { break; } v = node->initval; totype = node->totype; data |= ((((long)1 << totype->bitsize) - 1) & eval_intexpr(v, NULL)) << totype->bitoff; } emit_data_primtype(totype, &(Node){ AST_LITERAL, totype, .ival = data }, depth); off += totype->size; size -= totype->size; if (i == vec_len(inits)) break; } else {