// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/dissect.c
// Function: do_initializer
static struct symbol *do_initializer(struct symbol *type, struct expression *expr)
{
	struct symbol *m_type;
	struct expression *m_expr;
	int m_addr;

	if (expr) switch (expr->type) {
	default:
		do_expression(u_lval(type), expr);

	break; case EXPR_INDEX:
		do_initializer(base_type(type), expr->idx_expression);

	break; case EXPR_INITIALIZER:
		m_addr = 0;
		FOR_EACH_PTR(expr->expr_list, m_expr) {
			if (type->type == SYM_ARRAY) {
				m_type = base_type(type);
				if (m_expr->type == EXPR_INDEX)
					m_expr = m_expr->idx_expression;
			} else {
				int *m_atop = &m_addr;

				m_type = type;
				while (m_expr->type == EXPR_IDENTIFIER) {
					m_type = report_member(U_W_VAL, &m_expr->pos, m_type,
							lookup_member(m_type, m_expr->expr_ident, m_atop));
					m_expr = m_expr->ident_expression;
					m_atop = NULL;
				}

				if (m_atop) {
					m_type = report_member(U_W_VAL, &m_expr->pos, m_type,
							lookup_member(m_type, NULL, m_atop));
				}

				if (m_expr->type != EXPR_INITIALIZER)
					report_implicit(U_W_VAL, &m_expr->pos, m_type);
			}
			do_initializer(m_type, m_expr);
			m_addr++;
		} END_FOR_EACH_PTR(m_expr);
	}

	return type;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x16566
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0x54(%rbp)
subl $0x18, %eax
je 0x16380
jmp 0x1633f
movl -0x54(%rbp), %eax
subl $0x1a, %eax
je 0x16362
jmp 0x16349
movq -0x8(%rbp), %rdi
callq 0x165e0
movl %eax, %edi
movq -0x10(%rbp), %rsi
callq 0x15540
jmp 0x16564
movq -0x8(%rbp), %rdi
callq 0x16290
movq %rax, %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x16310
jmp 0x16564
movl $0x0, -0x24(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x163af
jmp 0x16562
jmp 0x163b1
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
movq -0x38(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
cmpl %ecx, %eax
jge 0x1654a
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movq 0x18(%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
movq -0x38(%rbp), %rax
movw (%rax), %ax
sarw $0x8, %ax
cwtl
cmpl $0x0, %eax
je 0x16403
cmpq $0x0, -0x20(%rbp)
jne 0x16403
jmp 0x1653c
movq -0x8(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x6, %eax
jne 0x16441
movq -0x8(%rbp), %rdi
callq 0x16290
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x1a, %eax
jne 0x1643c
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x16526
leaq -0x24(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x19, %eax
jne 0x164b9
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x50(%rbp), %rdx
callq 0x16920
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq %rax, %rcx
movl $0x8, %edi
callq 0x168a0
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x20(%rbp)
movq $0x0, -0x50(%rbp)
jmp 0x16451
cmpq $0x0, -0x50(%rbp)
je 0x164fe
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rdi
movq -0x50(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x16920
movq -0x78(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq %rax, %rcx
movl $0x8, %edi
callq 0x168a0
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x18, %eax
je 0x16524
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movq -0x18(%rbp), %rdx
movl $0x8, %edi
callq 0x16660
jmp 0x16526
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x16310
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x163b8
jmp 0x1654c
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq -0x30(%rbp), %rax
jne 0x163b1
jmp 0x16564
jmp 0x16566
movq -0x8(%rbp), %rax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)