// File: /workspace/github_c_makefile_star2_O2/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 0x1eec3
movq %rax, %rbx
cmpl $0x0, (%r14)
je 0x1ed98
xorl %eax, %eax
movq %rax, %rdi
callq 0x29d88
movq %rbx, %rdi
callq 0x29d88
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1672a(%rip), %r13     # 0x354c9
cmpl $0x2, (%r15)
jne 0x1ed86
movq %r15, %rdi
callq 0x12a25
movzbl (%rax), %ecx
cmpl $0x3c, %ecx
je 0x1ee12
cmpl $0x3e, %ecx
je 0x1edd9
cmpl $0x3d, %ecx
jne 0x1ee58
cmpb $0x0, 0x1(%rax)
leaq 0x1600e(%rip), %rbp     # 0x34ddc
jne 0x1ee58
jmp 0x1ee72
cmpb $0x0, 0x1(%rax)
leaq 0xb7fc(%rip), %rbp      # 0x2a5e0
je 0x1ee72
cmpb $0x3d, 0x1(%rax)
jne 0x1edfd
cmpb $0x0, 0x2(%rax)
leaq 0xb7f4(%rip), %rbp      # 0x2a5ef
je 0x1ee72
cmpb $0x3e, 0x1(%rax)
jne 0x1ee58
cmpb $0x0, 0x2(%rax)
leaq 0x165f4(%rip), %rbp     # 0x35402
jne 0x1ee58
jmp 0x1ee72
cmpb $0x3e, 0x1(%rax)
jne 0x1ee25
cmpb $0x0, 0x2(%rax)
leaq 0x16017(%rip), %rbp     # 0x34e3a
je 0x1ee72
cmpb $0x3d, 0x1(%rax)
jne 0x1ee38
cmpb $0x0, 0x2(%rax)
leaq 0xb7af(%rip), %rbp      # 0x2a5e5
je 0x1ee72
cmpb $0x0, 0x1(%rax)
leaq 0xb7a7(%rip), %rbp      # 0x2a5ea
je 0x1ee72
cmpb $0x3c, 0x1(%rax)
jne 0x1ee58
cmpb $0x0, 0x2(%rax)
leaq 0x164c7(%rip), %rbp     # 0x3531d
je 0x1ee72
movq %rax, %rdi
leaq 0x4ea53(%rip), %rsi     # 0x6d8b5
callq 0x12160
movq %r13, %rbp
testl %eax, %eax
jne 0x1ed86
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12e0e
cmpl $0x0, (%r14)
jne 0x1ed72
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1eec3
cmpl $0x0, (%r14)
jne 0x1ed74
movq %r12, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq *%rbp
movq %rax, %rbx
cmpl $0x0, (%r14)
je 0x1ed9f
jmp 0x1ed72