// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/frontend/parser_array.c
// Function: subtilis_parser_array_init_list
void subtilis_parser_array_init_list(subtilis_parser_t *p, subtilis_token_t *t,
				     const subtilis_array_desc_t *d,
				     subtilis_exp_t *e, subtilis_error_t *err)
{
	subtilis_type_t el_type;
	bool single_val;
	const char *tbuf;

	el_type.type = SUBTILIS_TYPE_VOID;

	subtilis_type_if_element_type(p, d->t, &el_type, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;
	tbuf = subtilis_token_get_text(t);
	single_val = (t->type != SUBTILIS_TOKEN_OPERATOR) || strcmp(tbuf, ",");
	if (subtilis_type_if_is_numeric(&el_type) &&
	    subtilis_type_if_is_numeric(&e->type)) {
		if (single_val) {
			subtilis_type_if_array_set(p, d->name, d->t, d->reg,
						   d->loc, e, err);
			e = NULL;
		} else {
			prv_parse_numeric_initialiser(p, t, e, d, err);
		}
	} else if (((d->t->type == SUBTILIS_TYPE_ARRAY_STRING) ||
		    (d->t->type == SUBTILIS_TYPE_VECTOR_STRING)) &&
		   ((e->type.type == SUBTILIS_TYPE_CONST_STRING) ||
		    (e->type.type == SUBTILIS_TYPE_STRING))) {
		if (single_val) {
			subtilis_type_if_array_set(p, d->name, d->t, d->reg,
						   d->loc, e, err);
			e = NULL;
		} else if (e->type.type == SUBTILIS_TYPE_CONST_STRING) {
			prv_parse_string_initialiser(p, t, e, d, err);
		} else {
			subtilis_error_set_const_string_expected(
			    err, p->l->stream->name, p->l->line);
		}
	} else if ((d->t->type == SUBTILIS_TYPE_ARRAY_FN) ||
		   (d->t->type == SUBTILIS_TYPE_VECTOR_FN)) {
		prv_fn_check_type(p, e, &el_type, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		if (single_val) {
			subtilis_type_if_array_set(p, d->name, d->t, d->reg,
						   d->loc, e, err);
			e = NULL;
		} else {
			prv_parse_fn_initialiser(p, t, &el_type, e, d, err);
		}
	} else {
		subtilis_error_set_array_type_mismatch(err, p->l->stream->name,
						       p->l->line);
	}
cleanup:
	subtilis_type_free(&el_type);
	subtilis_exp_delete(e);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl $0x8, -0x170(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x28(%rbp), %rcx
leaq -0x170(%rbp), %rdx
callq 0x47b70
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x18c53
jmp 0x18ee0
movq -0x10(%rbp), %rdi
callq 0x12d70
movq %rax, -0x180(%rbp)
movq -0x10(%rbp), %rcx
movb $0x1, %al
cmpl $0x2, (%rcx)
movb %al, -0x181(%rbp)
jne 0x18c93
movq -0x180(%rbp), %rdi
leaq 0x91927(%rip), %rsi     # 0xaa5a9
callq 0x12140
cmpl $0x0, %eax
setne %al
movb %al, -0x181(%rbp)
movb -0x181(%rbp), %al
andb $0x1, %al
movb %al, -0x171(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x49d10
testb $0x1, %al
jne 0x18cb3
jmp 0x18d27
movq -0x20(%rbp), %rdi
callq 0x49d10
testb $0x1, %al
jne 0x18cc2
jmp 0x18d27
testb $0x1, -0x171(%rbp)
je 0x18d09
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %r8
movq -0x20(%rbp), %r9
movq -0x28(%rbp), %rax
movq %rax, (%rsp)
callq 0x48550
movq $0x0, -0x20(%rbp)
jmp 0x18d22
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x18f00
jmp 0x18ede
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xd, (%rax)
je 0x18d45
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x13, (%rax)
jne 0x18dfd
movq -0x20(%rbp), %rax
cmpl $0x3, (%rax)
je 0x18d5b
movq -0x20(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x18dfd
testb $0x1, -0x171(%rbp)
je 0x18da2
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %r8
movq -0x20(%rbp), %r9
movq -0x28(%rbp), %rax
movq %rax, (%rsp)
callq 0x48550
movq $0x0, -0x20(%rbp)
jmp 0x18df8
movq -0x20(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x18dc6
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x193e0
jmp 0x18df6
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rax), %rdx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl 0x38(%rax), %ecx
movl $0x4a, %esi
leaq 0x91712(%rip), %r8      # 0xaa4fd
movl $0x464, %r9d            # imm = 0x464
callq 0x15930
jmp 0x18df8
jmp 0x18edc
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xe, (%rax)
je 0x18e1b
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x14, (%rax)
jne 0x18eaa
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rcx
leaq -0x170(%rbp), %rdx
callq 0x19540
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x18e41
jmp 0x18ee0
testb $0x1, -0x171(%rbp)
je 0x18e88
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %r8
movq -0x20(%rbp), %r9
movq -0x28(%rbp), %rax
movq %rax, (%rsp)
callq 0x48550
movq $0x0, -0x20(%rbp)
jmp 0x18ea8
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %r8
movq -0x28(%rbp), %r9
leaq -0x170(%rbp), %rdx
callq 0x195d0
jmp 0x18eda
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rax), %rdx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl 0x38(%rax), %ecx
movl $0x41, %esi
leaq 0x9162e(%rip), %r8      # 0xaa4fd
movl $0x474, %r9d            # imm = 0x474
callq 0x15930
jmp 0x18edc
jmp 0x18ede
jmp 0x18ee0
leaq -0x170(%rbp), %rdi
callq 0x3e100
movq -0x20(%rbp), %rdi
callq 0x36ee0
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
nop