// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/frontend/parser_loops.c
// Function: prv_for_assignment
static void prv_for_assignment(subtilis_parser_t *p, subtilis_token_t *t,
			       subtilis_for_context_t *for_ctx, bool new_local,
			       subtilis_error_t *err)
{
	char *var_name;
	const char *tbuf;
	subtilis_exp_t *e = NULL;

	var_name = prv_init_for_var(p, t, for_ctx, &new_local, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	tbuf = subtilis_token_get_text(t);
	if (strcmp(tbuf, "=") && strcmp(tbuf, ":=")) {
		subtilis_error_set_assignment_op_expected(
		    err, tbuf, p->l->stream->name, p->l->line);
		goto cleanup;
	}

	e = subtilis_parser_expression(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	/* Ownership of e is passed to the following functions. */

	e = subtilis_type_if_coerce_type(p, e, &for_ctx->type, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	if (new_local) {
		p->level++;
		subtilis_symbol_table_level_up(p->local_st, p->l, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		subtilis_type_if_assign_to_reg(p, for_ctx->loc, e, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		(void)subtilis_symbol_table_insert_reg(
		    p->local_st, var_name, &for_ctx->type, for_ctx->loc, err);
	} else {
		if (for_ctx->is_reg) {
			subtilis_type_if_assign_to_reg(p, for_ctx->loc, e, err);
		} else {
			subtilis_type_if_assign_to_mem(p, for_ctx->reg,
						       for_ctx->loc, e, err);
		}
		p->level++;
		subtilis_symbol_table_level_up(p->local_st, p->l, err);
	}

cleanup:

	free(var_name);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movb %cl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movq %r8, -0x28(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %r8
leaq -0x19(%rbp), %rcx
callq 0x2ad30
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x28f02
jmp 0x290d4
movq -0x10(%rbp), %rdi
callq 0x12d70
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
leaq 0x816fa(%rip), %rsi     # 0xaa614
callq 0x12140
cmpl $0x0, %eax
je 0x28f80
movq -0x38(%rbp), %rdi
leaq 0x81a98(%rip), %rsi     # 0xaa9c7
callq 0x12140
cmpl $0x0, %eax
je 0x28f80
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rdx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x30(%rax), %r8
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl 0x38(%rax), %r9d
movl $0x14, %esi
leaq 0x82313(%rip), %rcx     # 0xab276
leaq 0x81a40(%rip), %rax     # 0xaa9aa
movq %rax, (%rsp)
movl $0x1b0, 0x8(%rsp)       # imm = 0x1B0
callq 0x156d0
jmp 0x290cb
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x24a20
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x28fa3
jmp 0x290cb
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rdx
addq $0x18, %rdx
movq -0x28(%rbp), %rcx
callq 0x4a2e0
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x28fce
jmp 0x290cb
testb $0x1, -0x19(%rbp)
je 0x2905c
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x78(%rax)
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
movq -0x8(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rdx
callq 0x3c320
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x2900e
jmp 0x290cb
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x47ea0
movq -0x28(%rbp), %rax
cmpl $0x0, (%rax)
je 0x29035
jmp 0x290cb
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
movq -0x30(%rbp), %rsi
movq -0x18(%rbp), %rdx
addq $0x18, %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x28(%rbp), %r8
callq 0x3cc20
jmp 0x290c9
movq -0x18(%rbp), %rax
testb $0x1, (%rax)
je 0x29080
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x47ea0
jmp 0x290a1
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x40(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x47f20
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x78(%rax)
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
movq -0x8(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rdx
callq 0x3c320
jmp 0x290cb
movq -0x30(%rbp), %rdi
callq 0x12290
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)