// File: /workspace/github_c_makefile_star2_O0/msteveb[P]autosetup/./jimsh0.c
// Function: JimParseExpression
static int JimParseExpression(struct JimParserCtx *pc)
{
    pc->errmsg = NULL;

    while (1) {

        while (isspace(UCHAR(*pc->p)) || (*(pc->p) == '\\' && *(pc->p + 1) == '\n')) {
            if (*pc->p == '\n') {
                pc->linenr++;
            }
            pc->p++;
            pc->len--;
        }

        if (*pc->p == '#') {
            JimParseComment(pc);

            continue;
        }
        break;
    }


    pc->tline = pc->linenr;
    pc->tstart = pc->p;

    if (pc->len == 0) {
        pc->tend = pc->p;
        pc->tt = JIM_TT_EOL;
        pc->eof = 1;
        return JIM_OK;
    }
    switch (*(pc->p)) {
        case '(':
                pc->tt = JIM_TT_SUBEXPR_START;
                goto singlechar;
        case ')':
                pc->tt = JIM_TT_SUBEXPR_END;
                goto singlechar;
        case ',':
            pc->tt = JIM_TT_SUBEXPR_COMMA;
singlechar:
            pc->tend = pc->p;
            pc->p++;
            pc->len--;
            break;
        case '[':
            return JimParseCmd(pc);
        case '$':
            if (JimParseVar(pc) == JIM_ERR)
                return JimParseExprOperator(pc);
            else {

                if (pc->tt == JIM_TT_EXPRSUGAR) {
                    pc->errmsg = "nesting expr in expr is not allowed";
                    return JIM_ERR;
                }
                return JIM_OK;
            }
            break;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '.':
            return JimParseExprNumber(pc);
        case '"':
            return JimParseQuote(pc);
        case '{':
            return JimParseBrace(pc);

        case 'N':
        case 'I':
        case 'n':
        case 'i':
            if (JimParseExprIrrational(pc) == JIM_ERR)
                if (JimParseExprBoolean(pc) == JIM_ERR)
                    return JimParseExprOperator(pc);
            break;
        case 't':
        case 'f':
        case 'o':
        case 'y':
            if (JimParseExprBoolean(pc) == JIM_ERR)
                return JimParseExprOperator(pc);
            break;
        default:
            return JimParseExprOperator(pc);
            break;
    }
    return JIM_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq $0x0, 0x40(%rax)
jmp 0x21c6a
callq 0x64f0
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movzbl (%rcx), %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
andl $0x2000, %ecx           # imm = 0x2000
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x11(%rbp)
jne 0x21cc1
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x5c, %ecx
movb %al, -0x12(%rbp)
jne 0x21cbb
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %eax
cmpl $0xa, %eax
sete %al
movb %al, -0x12(%rbp)
movb -0x12(%rbp), %al
movb %al, -0x11(%rbp)
movb -0x11(%rbp), %al
testb $0x1, %al
jne 0x21cca
jmp 0x21d06
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0xa, %eax
jne 0x21ce6
movq -0x10(%rbp), %rax
movl 0xc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0xc(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x8(%rax)
jmp 0x21c6a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x21d23
movq -0x10(%rbp), %rdi
callq 0x1e860
jmp 0x21c68
jmp 0x21d25
movq -0x10(%rbp), %rax
movl 0xc(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x20(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x21d7d
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl $0x7, 0x24(%rax)
movq -0x10(%rbp), %rax
movl $0x1, 0x28(%rax)
movl $0x0, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x59, %eax
ja 0x21ed8
movq -0x20(%rbp), %rax
leaq 0x15040(%rip), %rcx     # 0x36de4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movl $0xb, 0x24(%rax)
jmp 0x21dd2
movq -0x10(%rbp), %rax
movl $0xc, 0x24(%rax)
jmp 0x21dd2
movq -0x10(%rbp), %rax
movl $0xd, 0x24(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x8(%rax)
jmp 0x21ee6
movq -0x10(%rbp), %rdi
callq 0x1e470
movl %eax, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rdi
callq 0x1e4c0
cmpl $0x1, %eax
jne 0x21e31
movq -0x10(%rbp), %rdi
callq 0x22140
movl %eax, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rax
cmpl $0x11, 0x24(%rax)
jne 0x21e56
movq -0x10(%rbp), %rax
leaq 0x1a3b9(%rip), %rcx     # 0x3c1ff
movq %rcx, 0x40(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x21eed
movl $0x0, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rdi
callq 0x22320
movl %eax, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rdi
callq 0x22420
movl %eax, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rdi
callq 0x1e950
movl %eax, -0x4(%rbp)
jmp 0x21eed
movq -0x10(%rbp), %rdi
callq 0x22470
cmpl $0x1, %eax
jne 0x21eb8
movq -0x10(%rbp), %rdi
callq 0x22530
cmpl $0x1, %eax
jne 0x21eb6
movq -0x10(%rbp), %rdi
callq 0x22140
movl %eax, -0x4(%rbp)
jmp 0x21eed
jmp 0x21eb8
jmp 0x21ee6
movq -0x10(%rbp), %rdi
callq 0x22530
cmpl $0x1, %eax
jne 0x21ed6
movq -0x10(%rbp), %rdi
callq 0x22140
movl %eax, -0x4(%rbp)
jmp 0x21eed
jmp 0x21ee6
movq -0x10(%rbp), %rdi
callq 0x22140
movl %eax, -0x4(%rbp)
jmp 0x21eed
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)