// File: /workspace/github_cpp_makefile_star2_O3/besm6[P]pascal-re/pascompl.cc
// Function: parseLval()
void parseLval()
{
    ExprPtr l4exp1z, l4exp2z;
    TypesPtr l4typ3z;
    Kind l4var4z;

    if (hashTravPtr->cl == FIELDID) {
        curExpr = expr62z;
        goto L13530;
    } else {
        curExpr = new Expr;
        curExpr->typ = hashTravPtr->typ;
        curExpr->op = GETVAR;
        curExpr->id1 = hashTravPtr;
L13462:
        inSymbol();
        l4typ3z = curExpr->typ;
        l4var4z = l4typ3z->k;
        if (SY == ARROW) {
            l4exp1z = new Expr;
            l4exp1z->expr1 = curExpr;
            if (l4var4z == kindPtr) {
                l4exp1z->typ = l4typ3z->cast<PtrT>().pbase;
                l4exp1z->op = DEREF;
            } else if (l4var4z == kindFile) {
                l4exp1z->typ = l4typ3z->cast<FileT>().fbase;
                l4exp1z->op = FILEPTR;
            } else {
                stmtName = "  ^   ";
                error(errWrongVarTypeBefore);
                l4exp1z->typ = l4typ3z;
            }
            curExpr = l4exp1z;
        } else if (SY == PERIOD) {
            if (l4var4z == kindRecord) {
                int93z = 3;
                typ121z = l4typ3z;
                inSymbol();
                if (hashTravPtr == NULL) {
                    error(20); /* errDigitGreaterThan7 ??? */
                } else {
L13530:             l4exp1z = new Expr;
                    l4exp1z->typ = hashTravPtr->typ;
                    l4exp1z->op = GETFIELD;
                    l4exp1z->expr1 = curExpr;
                    l4exp1z->id2 = hashTravPtr;
                    curExpr = l4exp1z;
                }
            } else {
                stmtName = "  .   ";
                error(errWrongVarTypeBefore);
            }
        } else if (SY == LBRACK) {
            stmtName = "  [   ";
            do {
                l4exp1z = curExpr;
                expression();
                l4typ3z = l4exp1z->typ;
                if (l4typ3z->k != kindArray) {
                    error(errWrongVarTypeBefore);
                } else {
                    if (not typeCheck(l4typ3z->cast<ArrayT>().range, curExpr->typ))
                        error(66 /*errOtherIndexTypeNeeded */);
                    l4exp2z = new Expr;
                    l4exp2z->typ = l4typ3z->cast<ArrayT>().base;
                    l4exp2z->expr1 = l4exp1z;
                    l4exp2z->expr2 = curExpr;
                    l4exp2z->op = GETELT;
                    l4exp1z = l4exp2z;
                }
                curExpr = l4exp1z;
                stmtName = "  ,   ";
            } while (SY == COMMA);
            if (SY != RBRACK)
                error(67 /*errNeedBracketAfterIndices*/);
        } else return;
    }
    goto L13462;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x328, %rsp            # imm = 0x328
movq 0x55e6a(%rip), %rax     # 0x649a0
cmpl $0x5, 0x20(%rax)
jne 0xeb8b
movq 0x55d0d(%rip), %rax     # 0x64850
movq %rax, 0x55f56(%rip)     # 0x64aa0
movl $0x20, %edi
callq 0x3d77
movq 0x55e45(%rip), %rcx     # 0x649a0
movq 0x18(%rcx), %rcx
movq %rcx, (%rax)
movl $0x21, 0x8(%rax)
movq 0x55f30(%rip), %rcx     # 0x64aa0
movq %rcx, 0x10(%rax)
movq 0x55e25(%rip), %rcx     # 0x649a0
movq %rcx, 0x18(%rax)
movq %rax, 0x55f1a(%rip)     # 0x64aa0
jmp 0xedc7
movl $0x20, %edi
callq 0x3d77
movq %rax, 0x55f04(%rip)     # 0x64aa0
movq 0x55dfd(%rip), %rcx     # 0x649a0
movq 0x18(%rcx), %rcx
movq %rcx, (%rax)
movq 0x55eef(%rip), %rax     # 0x64aa0
movl $0x1d, 0x8(%rax)
movq 0x55de1(%rip), %rcx     # 0x649a0
movq %rcx, 0x10(%rax)
jmp 0xedc7
movl $0x20, %edi
callq 0x3d77
movq %rax, %rbx
movq 0x55ec4(%rip), %rax     # 0x64aa0
movq %rax, 0x10(%rbx)
cmpl $0x7, %ebp
je 0xed76
cmpl $0x3, %ebp
jne 0xed91
cmpl $0x3, 0x10(%r14)
jne 0xee47
movq 0x18(%r14), %rax
movq %rax, (%rbx)
movl $0x22, 0x8(%rbx)
jmp 0xedc0
cmpl $0x6, %ebp
jne 0xed48
movq $0x3, 0x55d24(%rip) # 0x64948
movq %r14, 0x55d95(%rip)     # 0x649c0
leaq 0x48(%rsp), %rdi
callq 0x6f40
cmpq $0x0, 0x55d63(%rip)     # 0x649a0
jne 0xeb4a
movl $0x14, %edi
callq 0x58ff
jmp 0xedc7
movq 0x55c8f(%rip), %rdx     # 0x648e8
leaq 0x55c80(%rip), %rdi     # 0x648e0
leaq 0xe764(%rip), %rcx      # 0x1d3cb
movl $0x6, %r8d
xorl %esi, %esi
callq 0x3380
movq 0x55e25(%rip), %r14     # 0x64aa0
callq 0xee5e
movq (%r14), %r15
cmpl $0x5, 0x10(%r15)
jne 0xecf1
movq 0x20(%r15), %rsi
movq 0x55e0b(%rip), %rax     # 0x64aa0
movq (%rax), %rdx
movq %rsp, %rbx
movq %rbx, %rdi
callq 0x84c6
addq $-0x8, 0xae6fd(%rip)    # 0xbd3a8
cmpb $0x0, (%rbx)
jne 0xecba
movl $0x42, %edi
callq 0x58ff
movl $0x20, %edi
callq 0x3d77
cmpl $0x5, 0x10(%r15)
jne 0xee11
movq 0x18(%r15), %rcx
movq %rcx, (%rax)
movq %r14, 0x10(%rax)
movq 0x55dbf(%rip), %rcx     # 0x64aa0
movq %rcx, 0x18(%rax)
movl $0x1c, 0x8(%rax)
movq %rax, %r14
jmp 0xecfb
movl $0x16, %edi
callq 0x58ff
movq %r14, 0x55d9e(%rip)     # 0x64aa0
movq 0x55bdf(%rip), %rdx     # 0x648e8
leaq 0x55bd0(%rip), %rdi     # 0x648e0
leaq 0xe6bb(%rip), %rcx      # 0x1d3d2
movl $0x6, %r8d
xorl %esi, %esi
callq 0x3380
movl 0x55af2(%rip), %eax     # 0x6481c
cmpl $0xe, %eax
je 0xec74
cmpl $0xd, %eax
je 0xedc7
movl $0x43, %edi
callq 0x58ff
jmp 0xedc7
movq 0x55b99(%rip), %rdx     # 0x648e8
leaq 0x55b8a(%rip), %rdi     # 0x648e0
leaq 0xe667(%rip), %rcx      # 0x1d3c4
movl $0x6, %r8d
xorl %esi, %esi
callq 0x3380
movl $0x16, %edi
callq 0x58ff
jmp 0xedc7
cmpl $0x7, 0x10(%r14)
jne 0xee30
movq 0x18(%r14), %rax
movq %rax, (%rbx)
movl $0x23, 0x8(%rbx)
jmp 0xedc0
movq 0x55b50(%rip), %rdx     # 0x648e8
leaq 0x55b41(%rip), %rdi     # 0x648e0
leaq 0xe617(%rip), %rcx      # 0x1d3bd
movl $0x6, %r8d
xorl %esi, %esi
callq 0x3380
movl $0x16, %edi
callq 0x58ff
movq %r14, (%rbx)
movq %rbx, 0x55cd9(%rip)     # 0x64aa0
leaq 0x1b8(%rsp), %rdi
callq 0x6f40
movl 0x55a42(%rip), %eax     # 0x6481c
cmpl $0x8, %eax
je 0xec52
movq 0x55cb6(%rip), %rcx     # 0x64aa0
movq (%rcx), %r14
movl 0x10(%r14), %ebp
cmpl $0x10, %eax
je 0xec10
cmpl $0x11, %eax
je 0xebc8
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0xeaed(%rip), %rdi      # 0x1d905
leaq 0xe855(%rip), %rsi      # 0x1d674
leaq 0xebb9(%rip), %rcx      # 0x1d9df
movl $0x1f7, %edx            # imm = 0x1F7
callq 0x3170
leaq 0xeace(%rip), %rdi      # 0x1d905
leaq 0xe836(%rip), %rsi      # 0x1d674
leaq 0xec30(%rip), %rcx      # 0x1da75
jmp 0xee26
leaq 0xeab7(%rip), %rdi      # 0x1d905
leaq 0xe81f(%rip), %rsi      # 0x1d674
leaq 0xebfd(%rip), %rcx      # 0x1da59
jmp 0xee26