// File: /workspace/github_cpp_makefile_star2_O2/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 0x5c81f(%rip), %rax     # 0x63a28
movq %rax, (%rsi)
movl 0x5c60a(%rip), %eax     # 0x6381c
cmpl $0x6, %eax
jl 0x7294
testb %dl, %dl
je 0x72d5
movl 0x5c5f2(%rip), %r15d    # 0x63818
leal -0x5(%r15), %eax
cmpl $0x1, %eax
ja 0x72d5
movq %rsp, %rdi
callq 0x6316
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x71f0
movq (%r14), %rax
movq 0x5c796(%rip), %rcx     # 0x639e8
cmpq %rcx, %rax
je 0x7330
cmpq 0x5c78e(%rip), %rax     # 0x639f0
je 0x7330
pushq $0x3e
popq %rdi
callq 0x4f2c
movq 0x5c771(%rip), %rax     # 0x639e8
movq %rax, (%r14)
movzwl 0x6(%rbx), %eax
shlq $0x30, %rax
movabsq $0xd00000000001, %rcx   # imm = 0xD00000000001
orq %rax, %rcx
movq %rcx, (%rbx)
jmp 0x7310
jae 0x7310
movl %eax, %eax
leaq 0x121c1(%rip), %rcx     # 0x19460
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x5c6f1(%rip), %rax     # 0x639a0
testq %rax, %rax
je 0x72d5
cmpl $0x1, 0x20(%rax)
jne 0x72d5
movq 0x18(%rax), %rax
movq %rax, (%r14)
movq 0x5c6d8(%rip), %rdi     # 0x639a0
callq 0x12c80
movq (%rax), %rax
movq %rax, (%rbx)
jmp 0x7310
andq $0x0, (%r14)
pushq $0x6
popq %rdi
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
jmp 0x4f2c
callq 0x4ddf
jmp 0x730d
movq 0x5c6f5(%rip), %rax     # 0x639f0
jmp 0x730d
movq 0x5c6f4(%rip), %rax     # 0x639f8
jmp 0x730d
movq 0x5c6db(%rip), %rax     # 0x639e8
movq %rax, (%r14)
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
retq
movq 0x5c6a4(%rip), %rax     # 0x639c8
movq %rax, (%r14)
movq $0x7800, (%rbx)         # imm = 0x7800
jmp 0x7310
cmpl $0x6, %r15d
jne 0x7310
cmpq %rcx, %rax
je 0x7354
movq %rbx, %rdi
callq 0x128ea
xorps 0x12576(%rip), %xmm0    # 0x198c0
movq %rbx, %rdi
callq 0x12cea
jmp 0x7310
movq (%rbx), %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
negq %rsi
movq %rbx, %rdi
callq 0x381c
jmp 0x7310