// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/frontend/parser_exp.c
// Function: prv_priority5
static subtilis_exp_t *prv_priority5(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_priority4(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	while (t->type == SUBTILIS_TOKEN_OPERATOR) {
		tbuf = subtilis_token_get_text(t);
		if (!strcmp(tbuf, "="))
			exp_fn = subtilis_type_if_eq;
		else if (!strcmp(tbuf, "<>"))
			exp_fn = subtilis_type_if_neq;
		else if (!strcmp(tbuf, ">"))
			exp_fn = subtilis_exp_gt;
		else if (!strcmp(tbuf, "<="))
			exp_fn = subtilis_exp_lte;
		else if (!strcmp(tbuf, "<"))
			exp_fn = subtilis_exp_lt;
		else if (!strcmp(tbuf, ">="))
			exp_fn = subtilis_exp_gte;
		else if (!strcmp(tbuf, "<<"))
			exp_fn = subtilis_type_if_lsl;
		else if (!strcmp(tbuf, ">>"))
			exp_fn = subtilis_type_if_lsr;
		else if (!strcmp(tbuf, ">>>"))
			exp_fn = subtilis_type_if_asr;
		else
			break;
		subtilis_lexer_get(p->l, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		e2 = prv_priority4(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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
callq 0x1fbad
movq %rax, %rbx
cmpl $0x0, (%r14)
jne 0x1fb87
cmpl $0x2, (%r15)
jne 0x1fb9b
movq %r15, %rdi
callq 0x12ad0
movq %rax, %rbp
movq %rax, %rdi
leaq 0x53baa(%rip), %rsi     # 0x73604
callq 0x12160
leaq 0x17437(%rip), %r13     # 0x36e9d
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53e4d(%rip), %rsi     # 0x738c5
callq 0x12160
leaq 0x1745c(%rip), %r13     # 0x36ee0
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53e30(%rip), %rsi     # 0x738c6
callq 0x12160
leaq 0xc31e(%rip), %r13      # 0x2bdc0
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53e14(%rip), %rsi     # 0x738c8
callq 0x12160
leaq 0xc305(%rip), %r13      # 0x2bdc5
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53dfd(%rip), %rsi     # 0x738cf
callq 0x12160
leaq 0xc2ec(%rip), %r13      # 0x2bdca
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53ddf(%rip), %rsi     # 0x738cb
callq 0x12160
leaq 0xc2d7(%rip), %r13      # 0x2bdcf
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53dc8(%rip), %rsi     # 0x738ce
callq 0x12160
leaq 0x17824(%rip), %r13     # 0x37336
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53db2(%rip), %rsi     # 0x738d2
callq 0x12160
leaq 0x178ef(%rip), %r13     # 0x3741b
testl %eax, %eax
je 0x1fb4a
movq %rbp, %rdi
leaq 0x53d97(%rip), %rsi     # 0x738d1
callq 0x12160
leaq 0x1799c(%rip), %r13     # 0x374e2
testl %eax, %eax
jne 0x1fb9b
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12eda
cmpl $0x0, (%r14)
jne 0x1fb87
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1fbad
cmpl $0x0, (%r14)
jne 0x1fb89
movq %r12, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq *%r13
jmp 0x1fa2e
xorl %eax, %eax
movq %rax, %rdi
callq 0x2b4c3
movq %rbx, %rdi
callq 0x2b4c3
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq