// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/frontend/parser_exp.c
// Function: prv_priority3
static subtilis_exp_t *prv_priority3(subtilis_parser_t *p, subtilis_token_t *t,
				     subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_exp_t *e1 = NULL;
	subtilis_exp_t *e2 = NULL;
	subtilis_exp_fn_t exp_fn;

	e1 = prv_priority2(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;
	while ((t->type == SUBTILIS_TOKEN_OPERATOR) ||
	       (t->type == SUBTILIS_TOKEN_KEYWORD)) {
		tbuf = subtilis_token_get_text(t);
		if (t->type == SUBTILIS_TOKEN_KEYWORD) {
			if (t->tok.keyword.type == SUBTILIS_KEYWORD_DIV)
				exp_fn = subtilis_type_if_div;
			else if (t->tok.keyword.type == SUBTILIS_KEYWORD_MOD)
				exp_fn = subtilis_type_if_mod;
			else
				break;
		} else if (!strcmp(tbuf, "*")) {
			exp_fn = subtilis_type_if_mul;
		} else if (!strcmp(tbuf, "/")) {
			exp_fn = subtilis_type_if_divr;
		} else {
			break;
		}
		subtilis_lexer_get(p->l, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		e2 = prv_priority2(p, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		e1 = exp_fn(p, e1, e2, err);
		e2 = NULL;
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
	}

	return e1;

cleanup:

	subtilis_exp_delete(e2);
	subtilis_exp_delete(e1);
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x266e0
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x26577
jmp 0x266b2
jmp 0x26579
movq -0x18(%rbp), %rcx
movb $0x1, %al
cmpl $0x2, (%rcx)
movb %al, -0x41(%rbp)
je 0x26594
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
sete %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x265a0
jmp 0x266a8
movq -0x18(%rbp), %rdi
callq 0x12d70
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x265ed
movq -0x18(%rbp), %rax
cmpl $0x20, 0x8(%rax)
jne 0x265cd
leaq 0x22d69(%rip), %rax     # 0x49330
movq %rax, -0x40(%rbp)
jmp 0x265eb
movq -0x18(%rbp), %rax
cmpl $0x4d, 0x8(%rax)
jne 0x265e4
leaq 0x22e12(%rip), %rax     # 0x493f0
movq %rax, -0x40(%rbp)
jmp 0x265e9
jmp 0x266a8
jmp 0x265eb
jmp 0x26637
movq -0x28(%rbp), %rdi
leaq 0x89b66(%rip), %rsi     # 0xb015e
callq 0x12140
cmpl $0x0, %eax
jne 0x2660f
leaq 0x229a7(%rip), %rax     # 0x48fb0
movq %rax, -0x40(%rbp)
jmp 0x26635
movq -0x28(%rbp), %rdi
leaq 0x842fd(%rip), %rsi     # 0xaa917
callq 0x12140
cmpl $0x0, %eax
jne 0x26631
leaq 0x22e85(%rip), %rax     # 0x494b0
movq %rax, -0x40(%rbp)
jmp 0x26633
jmp 0x266a8
jmp 0x26635
jmp 0x26637
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x133f0
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x26656
jmp 0x266b2
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x266e0
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x26676
jmp 0x266b2
movq -0x40(%rbp), %rax
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq *%rax
movq %rax, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x266a3
jmp 0x266b2
jmp 0x26579
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x266cc
movq -0x38(%rbp), %rdi
callq 0x36ee0
movq -0x30(%rbp), %rdi
callq 0x36ee0
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)