// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/evaluate.c
// Function: handle_list_initializer
static void handle_list_initializer(struct expression *expr,
		int class, struct symbol *ctype, unsigned long mods)
{
	struct expression *e, *last = NULL, *top = NULL, *next;
	int jumped = 0;	// has the last designator multiple levels?

	if (expr->zero_init)
		free_ptr_list(&expr->expr_list);

	FOR_EACH_PTR(expr->expr_list, e) {
		struct expression **v;
		struct symbol *type;
		int lclass;

		if (e->type != EXPR_INDEX && e->type != EXPR_IDENTIFIER) {
			struct symbol *struct_sym;
			if (!top) {
				top = e;
				last = first_subobject(ctype, class, &top);
			} else {
				last = next_designators(last, ctype, e, &top);
			}
			if (!last) {
				excess(e, class & TYPE_PTR ? "array" :
							"struct or union");
				DELETE_CURRENT_PTR(e);
				continue;
			}
			struct_sym = ctype->type == SYM_NODE ? ctype->ctype.base_type : ctype;
			if (Wdesignated_init && struct_sym->designated_init)
				warning(e->pos, "%s%.*s%spositional init of field in %s %s, declared with attribute designated_init",
					ctype->ident ? "in initializer for " : "",
					ctype->ident ? ctype->ident->len : 0,
					ctype->ident ? ctype->ident->name : "",
					ctype->ident ? ": " : "",
					get_type_name(struct_sym->type),
					show_ident(struct_sym->ident));
			if (jumped && Wpast_deep_designator) {
				warning(e->pos, "advancing past deep designator");
				jumped = 0;
			}
			REPLACE_CURRENT_PTR(e, last);
		} else {
			next = check_designators(e, ctype);
			if (!next) {
				DELETE_CURRENT_PTR(e);
				continue;
			}
			top = next;
			/* deeper than one designator? */
			jumped = top != e;
			convert_designators(last);
			last = e;
		}

found:
		lclass = classify_type(top->ctype, &type);
		if (top->type == EXPR_INDEX)
			v = &top->idx_expression;
		else
			v = &top->ident_expression;

		mods |= ctype->ctype.modifiers & MOD_STORAGE;
		if (handle_initializer(v, 1, lclass, top->ctype, mods))
			continue;

		if (!(lclass & TYPE_COMPOUND)) {
			warning(e->pos, "bogus scalar initializer");
			DELETE_CURRENT_PTR(e);
			continue;
		}

		next = first_subobject(type, lclass, v);
		if (next) {
			warning(e->pos, "missing braces around initializer");
			top = next;
			goto found;
		}

		DELETE_CURRENT_PTR(e);
		excess(e, lclass & TYPE_PTR ? "array" : "struct or union");

	} END_FOR_EACH_PTR(e);

	convert_designators(last);
	expr->ctype = ctype;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movl $0x0, -0x44(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
shrl $0x10, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x54443
jmp 0x54434
movq -0x8(%rbp), %rdi
addq $0x20, %rdi
callq 0x31cd0
jmp 0x54443
jmp 0x54445
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpq $0x0, -0x50(%rbp)
jne 0x5446d
jmp 0x54bd9
jmp 0x5446f
movl $0x0, -0x64(%rbp)
movl -0x64(%rbp), %eax
movq -0x58(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
cmpl %ecx, %eax
jge 0x54bc1
movq -0x58(%rbp), %rax
movslq -0x64(%rbp), %rcx
movq 0x18(%rax,%rcx,8), %rax
movq %rax, -0x28(%rbp)
movq -0x58(%rbp), %rax
movw (%rax), %ax
sarw $0x8, %ax
cwtl
cmpl $0x0, %eax
je 0x544c1
cmpq $0x0, -0x28(%rbp)
jne 0x544c1
jmp 0x54bb3
movq -0x28(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x1a, %eax
je 0x54804
movq -0x28(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x19, %eax
je 0x54804
cmpq $0x0, -0x38(%rbp)
jne 0x5450e
movq -0x28(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rdi
movl -0xc(%rbp), %esi
leaq -0x38(%rbp), %rdx
callq 0x54c80
movq %rax, -0x30(%rbp)
jmp 0x54527
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq -0x38(%rbp), %rcx
callq 0x54ec0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x54620
movq -0x28(%rbp), %rdi
movl -0xc(%rbp), %ecx
andl $0x10, %ecx
leaq 0x180db(%rip), %rsi     # 0x6c61e
leaq 0x17dee(%rip), %rax     # 0x6c338
cmpl $0x0, %ecx
cmovneq %rax, %rsi
callq 0x55140
movq -0x58(%rbp), %rax
addq $0x18, %rax
movslq -0x64(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x58(%rbp), %rax
addq $0x18, %rax
movq -0x58(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x98(%rbp), %rax
jae 0x545d8
movq -0x90(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x90(%rbp), %rax
movq %rcx, (%rax)
movq -0x90(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x90(%rbp)
jmp 0x5459f
movq -0x90(%rbp), %rax
movl $0xf0f0f0f0, %ecx       # imm = 0xF0F0F0F0
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movw (%rax), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
addl $-0x1, %ecx
movw %cx, %dx
movw (%rax), %cx
andw $0xff, %dx
andw $0xff00, %cx            # imm = 0xFF00
orw %dx, %cx
movw %cx, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x54bb3
movq -0x18(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x3, %eax
jne 0x54641
movq -0x18(%rbp), %rax
movq 0x60(%rax), %rax
movq %rax, -0xd0(%rbp)
jmp 0x5464c
movq -0x18(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq 0x301bf(%rip), %rax     # 0x84820
cmpl $0x0, (%rax)
je 0x547bd
movq -0x88(%rbp), %rax
movl 0x54(%rax), %eax
shrl $0x10, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x547bd
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xe0(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdx
leaq 0xe188(%rip), %rax      # 0x62829
leaq 0x17e99(%rip), %rcx     # 0x6c541
cmpq $0x0, %rdx
cmovneq %rcx, %rax
movq %rax, -0xd8(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x546d6
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movzbl 0x10(%rax), %eax
movl %eax, -0xe4(%rbp)
jmp 0x546e0
xorl %eax, %eax
movl %eax, -0xe4(%rbp)
jmp 0x546e0
movl -0xe4(%rbp), %eax
movl %eax, -0xe8(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x5470c
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x12, %rax
movq %rax, -0xf0(%rbp)
jmp 0x5471c
leaq 0xe116(%rip), %rax      # 0x62829
movq %rax, -0xf0(%rbp)
jmp 0x5471c
movq -0xf0(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdx
leaq 0xe0f0(%rip), %rax      # 0x62829
leaq 0xf987(%rip), %rcx      # 0x640c7
cmpq $0x0, %rdx
cmovneq %rcx, %rax
movq %rax, -0x100(%rbp)
movq -0x88(%rbp), %rax
movl (%rax), %edi
andl $0xff, %edi
callq 0x40200
movq %rax, -0xf8(%rbp)
movq -0x88(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x44150
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
movl -0xe8(%rbp), %ecx
movq -0x108(%rbp), %r8
movq -0x100(%rbp), %r9
movq -0xf8(%rbp), %r10
movq (%rsi), %rdi
leaq 0x17d41(%rip), %rsi     # 0x6c4ee
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
movb $0x0, %al
callq 0x16d80
cmpl $0x0, -0x44(%rbp)
je 0x547ec
leaq 0x38a32(%rip), %rax     # 0x8d1fc
cmpl $0x0, (%rax)
je 0x547ec
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x17d77(%rip), %rsi     # 0x6c555
movb $0x0, %al
callq 0x16d80
movl $0x0, -0x44(%rbp)
jmp 0x547ee
movq -0x30(%rbp), %rdx
movq -0x58(%rbp), %rax
movslq -0x64(%rbp), %rcx
movq %rdx, 0x18(%rax,%rcx,8)
jmp 0x54918
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x55170
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jne 0x548ec
jmp 0x54822
movq -0x58(%rbp), %rax
addq $0x18, %rax
movslq -0x64(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0x58(%rbp), %rax
addq $0x18, %rax
movq -0x58(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0xa8(%rbp)
movq -0xa0(%rbp), %rax
cmpq -0xa8(%rbp), %rax
jae 0x548a4
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, (%rax)
movq -0xa0(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xa0(%rbp)
jmp 0x5486b
movq -0xa0(%rbp), %rax
movl $0xf0f0f0f0, %ecx       # imm = 0xF0F0F0F0
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movw (%rax), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
addl $-0x1, %ecx
movw %cx, %dx
movw (%rax), %cx
andw $0xff, %dx
andw $0xff00, %cx            # imm = 0xFF00
orw %dx, %cx
movw %cx, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x54bb3
movq -0x40(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x28(%rbp), %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x44(%rbp)
movq -0x30(%rbp), %rdi
callq 0x553a0
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x5491a
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rdi
leaq -0x78(%rbp), %rsi
callq 0x4bf20
movl %eax, -0x7c(%rbp)
movq -0x38(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x1a, %eax
jne 0x54950
movq -0x38(%rbp), %rax
addq $0x20, %rax
addq $0x8, %rax
movq %rax, -0x70(%rbp)
jmp 0x54960
movq -0x38(%rbp), %rax
addq $0x20, %rax
addq $0x18, %rax
movq %rax, -0x70(%rbp)
movq -0x18(%rbp), %rax
movq 0x68(%rax), %rax
andq $0x5f, %rax
orq -0x20(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x70(%rbp), %rdi
movl -0x7c(%rbp), %edx
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x20(%rbp), %r8
movl $0x1, %esi
callq 0x53d30
cmpl $0x0, %eax
je 0x5499b
jmp 0x54bb3
movl -0x7c(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
jne 0x54a8a
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x17bbb(%rip), %rsi     # 0x6c574
movb $0x0, %al
callq 0x16d80
movq -0x58(%rbp), %rax
addq $0x18, %rax
movslq -0x64(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xb0(%rbp)
movq -0x58(%rbp), %rax
addq $0x18, %rax
movq -0x58(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jae 0x54a42
movq -0xb0(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0xb0(%rbp), %rax
movq %rcx, (%rax)
movq -0xb0(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xb0(%rbp)
jmp 0x54a09
movq -0xb0(%rbp), %rax
movl $0xf0f0f0f0, %ecx       # imm = 0xF0F0F0F0
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movw (%rax), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
addl $-0x1, %ecx
movw %cx, %dx
movw (%rax), %cx
andw $0xff, %dx
andw $0xff00, %cx            # imm = 0xFF00
orw %dx, %cx
movw %cx, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x54bb3
movq -0x78(%rbp), %rdi
movl -0x7c(%rbp), %esi
movq -0x70(%rbp), %rdx
callq 0x54c80
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0x54ac8
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x17ad9(%rip), %rsi     # 0x6c58d
movb $0x0, %al
callq 0x16d80
movq -0x40(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x5491a
jmp 0x54aca
movq -0x58(%rbp), %rax
addq $0x18, %rax
movslq -0x64(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xc0(%rbp)
movq -0x58(%rbp), %rax
addq $0x18, %rax
movq -0x58(%rbp), %rcx
movw (%rcx), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
movslq %ecx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq %rax, -0xc8(%rbp)
movq -0xc0(%rbp), %rax
cmpq -0xc8(%rbp), %rax
jae 0x54b4c
movq -0xc0(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0xc0(%rbp), %rax
movq %rcx, (%rax)
movq -0xc0(%rbp), %rax
addq $0x8, %rax
movq %rax, -0xc0(%rbp)
jmp 0x54b13
movq -0xc0(%rbp), %rax
movl $0xf0f0f0f0, %ecx       # imm = 0xF0F0F0F0
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
movw (%rax), %cx
shlw $0x8, %cx
sarw $0x8, %cx
movswl %cx, %ecx
addl $-0x1, %ecx
movw %cx, %dx
movw (%rax), %cx
andw $0xff, %dx
andw $0xff00, %cx            # imm = 0xFF00
orw %dx, %cx
movw %cx, (%rax)
movl -0x64(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x64(%rbp)
movq -0x28(%rbp), %rdi
movl -0x7c(%rbp), %ecx
andl $0x10, %ecx
leaq 0x17a7e(%rip), %rsi     # 0x6c61e
leaq 0x17791(%rip), %rax     # 0x6c338
cmpl $0x0, %ecx
cmovneq %rax, %rsi
callq 0x55140
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x54476
jmp 0x54bc3
movq -0x58(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
cmpq -0x50(%rbp), %rax
jne 0x5446f
movq -0x30(%rbp), %rdi
callq 0x553a0
movq -0x18(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nopw (%rax,%rax)