// File: /workspace/github_cpp_makefile_star2_O1/besm6[P]pascal-re/pascompl.cc
// Function: parseLiteral(Types*&, Word&, bool)
void parseLiteral(TypesPtr & litType, Word & litValue,
    bool allowSign)
{
    Operator l3var1z;
    litValue = curToken;
    if (GTSY < SY) {
        if (allowSign and (charClass == PLUSOP || charClass == MINUSOP))  {
            l3var1z = charClass;
            inSymbol();
            parseLiteral(litType, litValue, false);
            if (litType != IntegerType && litType != RealType) {
                error(62); /* errIntegerNeeded */
                litType = IntegerType;
                litValue.i = 1;
            } else if (l3var1z == MINUSOP) {
                if (litType == IntegerType)
                    litValue.i = -litValue.i;
                else
                    litValue.r = -litValue.r;
            }
        } else {
L99:        litType = NULL;
            error(errNoConstant);
        }
    } else
        switch (SY) {
        case IDENT: {
            if ((hashTravPtr == NULL) or
                (hashTravPtr->cl != ENUMID))
                goto L99;
            litType = hashTravPtr->typ;
            litValue.ii = hashTravPtr->value();
        } break;
        case INTCONST:
            litType = IntegerType;
            break;
        case REALCONST:
            litType = RealType;
            break;
        case CHARCONST:
            litType = CharType;
            break;
        case LTSY:
            litType = makeStringType();
            break;
        case GTSY: {
            litType = pointerType;
            litValue.ii = 074000;
            } break;
        default: break;
        } /* case */
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x170, %rsp            # imm = 0x170
movq %rsi, %rbx
movq %rdi, %r14
movq 0x5c9f8(%rip), %rax     # 0x64a38
movq %rax, (%rsi)
movl 0x5c7e3(%rip), %eax     # 0x6482c
cmpl $0x6, %eax
jl 0x80d4
testb %dl, %dl
je 0x811f
movl 0x5c7c7(%rip), %r15d    # 0x64828
leal -0x5(%r15), %eax
cmpl $0x1, %eax
ja 0x811f
movq %rsp, %rdi
callq 0x6e26
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x8027
movq (%r14), %rax
movq 0x5c96b(%rip), %rcx     # 0x649f8
cmpq %rcx, %rax
je 0x817f
cmpq 0x5c963(%rip), %rax     # 0x64a00
je 0x817f
movl $0x3e, %edi
callq 0x589e
movq 0x5c944(%rip), %rax     # 0x649f8
movq %rax, (%r14)
movzwl 0x6(%rbx), %eax
shlq $0x30, %rax
movabsq $0xd00000000001, %rcx   # imm = 0xD00000000001
orq %rax, %rcx
movq %rcx, (%rbx)
jmp 0x815f
jae 0x815f
movl %eax, %eax
leaq 0x1437d(%rip), %rcx     # 0x1c460
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x5c8bd(%rip), %rax     # 0x649b0
testq %rax, %rax
je 0x811f
cmpl $0x1, 0x20(%rax)
jne 0x811f
movq 0x18(%rax), %rax
movq %rax, (%r14)
movq 0x5c8a4(%rip), %rax     # 0x649b0
cmpl $0x0, 0x20(%rax)
je 0x81cb
movq 0x30(%rax), %rax
movq %rax, (%rbx)
jmp 0x815f
movq $0x0, (%r14)
movl $0x6, %edi
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
jmp 0x589e
callq 0x5702
jmp 0x815c
movq 0x5c8b6(%rip), %rax     # 0x64a00
jmp 0x815c
movq 0x5c8b5(%rip), %rax     # 0x64a08
jmp 0x815c
movq 0x5c89c(%rip), %rax     # 0x649f8
movq %rax, (%r14)
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
retq
movq 0x5c865(%rip), %rax     # 0x649d8
movq %rax, (%r14)
movq $0x7800, (%rbx)         # imm = 0x7800
jmp 0x815f
cmpl $0x6, %r15d
jne 0x815f
movq (%rbx), %rdi
movq %rdi, %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
cmpq %rcx, %rax
je 0x81be
cvtsi2sd %rsi, %xmm0
shrq $0x29, %rdi
andl $0x7f, %edi
addl $-0x68, %edi
callq 0x3370
xorpd 0x146ec(%rip), %xmm0    # 0x1c8a0
movq %rbx, %rdi
callq 0x1591a
jmp 0x815f
negq %rsi
movq %rbx, %rdi
callq 0x3bf2
jmp 0x815f
leaq 0x15408(%rip), %rdi     # 0x1d5da
leaq 0x153db(%rip), %rsi     # 0x1d5b4
leaq 0x15407(%rip), %rcx     # 0x1d5e7
movl $0x2d9, %edx            # imm = 0x2D9
callq 0x3170