// File: 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
movq %rsp, %rbp
subq $0x370, %rsp            # imm = 0x370
movq 0x6b56e(%rip), %rax     # 0x80060
cmpl $0x5, 0x20(%rax)
jne 0x14b0b
movq 0x6b411(%rip), %rax     # 0x7ff10
movq %rax, 0x6b65a(%rip)     # 0x80160
jmp 0x14c78
movl $0x20, %edi
callq 0x1e2e0
movq %rax, 0x6b644(%rip)     # 0x80160
movq 0x6b53d(%rip), %rax     # 0x80060
movq 0x18(%rax), %rcx
movq 0x6b632(%rip), %rax     # 0x80160
movq %rcx, (%rax)
movq 0x6b628(%rip), %rax     # 0x80160
movl $0x1d, 0x8(%rax)
movq 0x6b51a(%rip), %rcx     # 0x80060
movq 0x6b613(%rip), %rax     # 0x80160
movq %rcx, 0x10(%rax)
leaq -0x190(%rbp), %rdi
callq 0x9790
movq 0x6b5fc(%rip), %rax     # 0x80160
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x1c(%rbp)
cmpl $0x11, 0x6b360(%rip)    # 0x7fedc
jne 0x14c27
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x8(%rbp)
movq 0x6b5c9(%rip), %rcx     # 0x80160
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
cmpl $0x3, -0x1c(%rbp)
jne 0x14bc6
movq -0x18(%rbp), %rdi
callq 0x1eab0
movq 0x18(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movl $0x22, 0x8(%rax)
jmp 0x14c17
cmpl $0x7, -0x1c(%rbp)
jne 0x14bed
movq -0x18(%rbp), %rdi
callq 0x1ebe0
movq 0x18(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movl $0x23, 0x8(%rax)
jmp 0x14c15
leaq 0x6b3ac(%rip), %rdi     # 0x7ffa0
leaq 0x1d78a(%rip), %rsi     # 0x32385
callq 0x43f0
movl $0x16, %edi
callq 0x7b40
movq -0x18(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
jmp 0x14c17
movq -0x8(%rbp), %rax
movq %rax, 0x6b53e(%rip)     # 0x80160
jmp 0x14e74
cmpl $0x10, 0x6b2ae(%rip)    # 0x7fedc
jne 0x14cf0
cmpl $0x6, -0x1c(%rbp)
jne 0x14cce
movq $0x3, 0x6b3bf(%rip) # 0x80008
movq -0x18(%rbp), %rax
movq %rax, 0x6b42c(%rip)     # 0x80080
leaq -0x300(%rbp), %rdi
callq 0x9790
cmpq $0x0, 0x6b3f8(%rip)     # 0x80060
jne 0x14c76
movl $0x14, %edi
callq 0x7b40
jmp 0x14ccc
jmp 0x14c78
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x8(%rbp)
movq 0x6b3d3(%rip), %rax     # 0x80060
movq 0x18(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movl $0x21, 0x8(%rax)
movq 0x6b4b6(%rip), %rcx     # 0x80160
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x6b3a7(%rip), %rcx     # 0x80060
movq -0x8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rax
movq %rax, 0x6b494(%rip)     # 0x80160
jmp 0x14ceb
leaq 0x6b2cb(%rip), %rdi     # 0x7ffa0
leaq 0x1d6b0(%rip), %rsi     # 0x3238c
callq 0x43f0
movl $0x16, %edi
callq 0x7b40
jmp 0x14e72
cmpl $0x8, 0x6b1e5(%rip)     # 0x7fedc
jne 0x14e67
leaq 0x6b29c(%rip), %rdi     # 0x7ffa0
leaq 0x1d688(%rip), %rsi     # 0x32393
callq 0x43f0
movq 0x6b449(%rip), %rax     # 0x80160
movq %rax, -0x8(%rbp)
callq 0x14e90
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x5, 0x10(%rax)
je 0x14d44
movl $0x16, %edi
callq 0x7b40
jmp 0x14e27
movq -0x18(%rbp), %rdi
callq 0x1e210
movq 0x20(%rax), %rsi
movq 0x6b408(%rip), %rax     # 0x80160
movq (%rax), %rdx
leaq -0x348(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0xb280
movq -0x360(%rbp), %rdi
callq 0x1e950
movb %al, -0x355(%rbp)
jmp 0x14d82
movb -0x355(%rbp), %al
xorb $-0x1, %al
movb %al, -0x361(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x1e9c0
movb -0x361(%rbp), %al
testb $0x1, %al
jne 0x14da8
jmp 0x14dd7
movl $0x42, %edi
callq 0x7b40
jmp 0x14dd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x1e9c0
jmp 0x14e7b
movl $0x20, %edi
callq 0x1e2e0
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rdi
callq 0x1e210
movq 0x18(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x6b354(%rip), %rcx     # 0x80160
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movl $0x1c, 0x8(%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, 0x6b32e(%rip)     # 0x80160
leaq 0x6b167(%rip), %rdi     # 0x7ffa0
leaq 0x1d55a(%rip), %rsi     # 0x3239a
callq 0x43f0
cmpl $0xe, 0x6b090(%rip)     # 0x7fedc
je 0x14d10
cmpl $0xd, 0x6b083(%rip)     # 0x7fedc
je 0x14e65
movl $0x43, %edi
callq 0x7b40
jmp 0x14e70
addq $0x370, %rsp            # imm = 0x370
popq %rbp
retq
jmp 0x14e72
jmp 0x14e74
jmp 0x14e76
jmp 0x14b51
movq -0x350(%rbp), %rdi
callq 0x44c0
nopw (%rax,%rax)