// File: /workspace/github_c_makefile_star2_O2/msteveb[P]autosetup/./jimsh0.c
// Function: JimParseStr
static int JimParseStr(struct JimParserCtx *pc)
{
    if (pc->tt == JIM_TT_SEP || pc->tt == JIM_TT_EOL ||
        pc->tt == JIM_TT_NONE || pc->tt == JIM_TT_STR) {

        if (*pc->p == '{') {
            return JimParseBrace(pc);
        }
        if (*pc->p == '"') {
            pc->inquote = 1;
            pc->p++;
            pc->len--;

            pc->missing.line = pc->tline;
        }
    }
    pc->tstart = pc->p;
    pc->tline = pc->linenr;
    while (1) {
        if (pc->len == 0) {
            if (pc->inquote) {
                pc->missing.ch = '"';
            }
            pc->tend = pc->p - 1;
            pc->tt = JIM_TT_ESC;
            return JIM_OK;
        }
        switch (*pc->p) {
            case '\\':
                if (!pc->inquote && *(pc->p + 1) == '\n') {
                    pc->tend = pc->p - 1;
                    pc->tt = JIM_TT_ESC;
                    return JIM_OK;
                }
                if (pc->len >= 2) {
                    if (*(pc->p + 1) == '\n') {
                        pc->linenr++;
                    }
                    pc->p++;
                    pc->len--;
                }
                else if (pc->len == 1) {

                    pc->missing.ch = '\\';
                }
                break;
            case '(':

                if (pc->len > 1 && pc->p[1] != '$') {
                    break;
                }

            case ')':

                if (*pc->p == '(' || pc->tt == JIM_TT_VAR) {
                    if (pc->p == pc->tstart) {

                        pc->p++;
                        pc->len--;
                    }
                    pc->tend = pc->p - 1;
                    pc->tt = JIM_TT_ESC;
                    return JIM_OK;
                }
                break;

            case '$':
            case '[':
                pc->tend = pc->p - 1;
                pc->tt = JIM_TT_ESC;
                return JIM_OK;
            case ' ':
            case '\t':
            case '\n':
            case '\r':
            case '\f':
            case ';':
                if (!pc->inquote) {
                    pc->tend = pc->p - 1;
                    pc->tt = JIM_TT_ESC;
                    return JIM_OK;
                }
                else if (*pc->p == '\n') {
                    pc->linenr++;
                }
                break;
            case '"':
                if (pc->inquote) {
                    pc->tend = pc->p - 1;
                    pc->tt = JIM_TT_ESC;
                    pc->p++;
                    pc->len--;
                    pc->inquote = 0;
                    return JIM_OK;
                }
                break;
        }
        pc->p++;
        pc->len--;
    }
    return JIM_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
movl 0x24(%rdi), %ecx
cmpl $0x7, %ecx
ja 0x15b2a
movl $0xc3, %eax
btl %ecx, %eax
jae 0x15b2a
movq (%rdi), %rdx
movzbl (%rdx), %eax
cmpl $0x22, %eax
je 0x15b12
cmpl $0x7b, %eax
jne 0x15b2d
popq %rbx
popq %r14
popq %rbp
jmp 0x15f10
movl $0x1, 0x2c(%rdi)
incq %rdx
movq %rdx, (%rdi)
decl 0x8(%rdi)
movl 0x20(%rdi), %eax
movl %eax, 0x38(%rdi)
jmp 0x15b2d
movq (%rdi), %rdx
movq %rdx, 0x10(%rdi)
movl 0x8(%rdi), %esi
movl 0xc(%rdi), %r8d
movl %r8d, 0x20(%rdi)
movl $0x1, %r9d
leaq 0xd6af(%rip), %r10      # 0x231f8
movq %rdx, %rax
testl %esi, %esi
je 0x15c12
movb (%rax), %r11b
movzbl %r11b, %ebx
leal -0x20(%rbx), %r14d
cmpl $0x9, %r14d
jbe 0x15b8d
leal -0x9(%rbx), %r14d
cmpl $0x2, %r14d
jb 0x15b96
leal -0xc(%rbx), %r14d
cmpl $0x2, %r14d
jb 0x15b96
cmpl $0x3b, %ebx
je 0x15b96
cmpl $0x5c, %ebx
je 0x15bce
cmpl $0x5b, %ebx
jne 0x15c02
jmp 0x15c31
movslq (%r10,%r14,4), %rbx
addq %r10, %rbx
jmpq *%rbx
cmpl $0x0, 0x2c(%rdi)
je 0x15c31
cmpb $0xa, %r11b
jne 0x15c02
incl %r8d
movl %r8d, 0xc(%rdi)
jmp 0x15c02
cmpl $0x0, 0x2c(%rdi)
je 0x15c02
jmp 0x15c44
cmpl $0x3, %ecx
jne 0x15c02
jmp 0x15c21
cmpl $0x2, %esi
jl 0x15c21
cmpb $0x24, 0x1(%rax)
jne 0x15c02
jmp 0x15c21
cmpl $0x0, 0x2c(%rdi)
jne 0x15bda
cmpb $0xa, 0x1(%rax)
je 0x15c31
cmpl $0x2, %esi
jl 0x15bf3
cmpb $0xa, 0x1(%rax)
jne 0x15bec
incl %r8d
movl %r8d, 0xc(%rdi)
incq %rax
decl %esi
jmp 0x15c02
cmpl $0x1, %esi
jne 0x15c02
movl $0x5c, 0x34(%rdi)
movl %r9d, %esi
incq %rax
movq %rax, (%rdi)
decl %esi
movl %esi, 0x8(%rdi)
jmp 0x15b4c
cmpl $0x0, 0x2c(%rdi)
je 0x15c31
movl $0x22, 0x34(%rdi)
jmp 0x15c31
cmpq %rdx, %rax
jne 0x15c31
incq %rax
movq %rax, (%rdi)
decl %esi
movl %esi, 0x8(%rdi)
decq %rax
movq %rax, 0x18(%rdi)
movl $0x2, 0x24(%rdi)
popq %rbx
popq %r14
popq %rbp
retq
leaq -0x1(%rax), %rcx
movq %rcx, 0x18(%rdi)
movl $0x2, 0x24(%rdi)
incq %rax
movq %rax, (%rdi)
decl %esi
movl %esi, 0x8(%rdi)
andl $0x0, 0x2c(%rdi)
jmp 0x15c3f