// File: /workspace/github_cpp_makefile_star2_O2/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 0x56be3(%rip), %rax     # 0x639a0
cmpl $0x5, 0x20(%rax)
jne 0xce10
movq 0x56a86(%rip), %rax     # 0x63850
movq %rax, 0x56ccf(%rip)     # 0x63aa0
pushq $0x20
popq %rdi
callq 0x390b
movq 0x56bc0(%rip), %rcx     # 0x639a0
movq 0x18(%rcx), %rcx
movq %rcx, (%rax)
movl $0x21, 0x8(%rax)
movq 0x56cab(%rip), %rcx     # 0x63aa0
movq %rcx, 0x10(%rax)
movq 0x56ba0(%rip), %rcx     # 0x639a0
movq %rcx, 0x18(%rax)
movq %rax, 0x56c95(%rip)     # 0x63aa0
jmp 0xcfff
pushq $0x20
popq %rdi
callq 0x390b
movq %rax, 0x56c81(%rip)     # 0x63aa0
movq 0x56b7a(%rip), %rcx     # 0x639a0
movq 0x18(%rcx), %rcx
movq %rcx, (%rax)
movq 0x56c6c(%rip), %rax     # 0x63aa0
movl $0x1d, 0x8(%rax)
movq 0x56b5e(%rip), %rcx     # 0x639a0
movq %rcx, 0x10(%rax)
jmp 0xcfff
pushq $0x20
popq %rdi
callq 0x390b
movq %rax, %r14
movq 0x56c43(%rip), %rax     # 0x63aa0
movq %rax, 0x10(%r14)
cmpl $0x7, %ebp
je 0xcfc1
cmpl $0x3, %ebp
jne 0xcfda
movq %rbx, %rdi
callq 0x12df0
movq 0x18(%rax), %rax
movq %rax, (%r14)
movl $0x22, 0x8(%r14)
jmp 0xcff8
cmpl $0x6, %ebp
jne 0xcfa4
movq $0x3, 0x56aa5(%rip) # 0x63948
movq %rbx, 0x56b16(%rip)     # 0x639c0
leaq 0x48(%rsp), %rdi
callq 0x6316
cmpq $0x0, 0x56ae4(%rip)     # 0x639a0
jne 0xcdd1
pushq $0x14
popq %rdi
callq 0x4f2c
jmp 0xcfff
leaq 0x56a0a(%rip), %rdi     # 0x638e0
leaq 0xd45e(%rip), %rsi      # 0x1a33b
callq 0x3460
movq 0x56bb7(%rip), %r15     # 0x63aa0
callq 0xd048
movq (%r15), %rbx
cmpl $0x5, 0x10(%rbx)
jne 0xcf64
movq %rbx, %rdi
callq 0x12c02
movq 0x20(%rax), %rsi
movq 0x56b96(%rip), %rax     # 0x63aa0
movq (%rax), %rdx
movq %rsp, %r14
movq %r14, %rdi
callq 0x74d4
addq $-0x8, 0xaf488(%rip)    # 0xbc3a8
cmpb $0x0, (%r14)
jne 0xcf2e
pushq $0x42
popq %rdi
callq 0x4f2c
pushq $0x20
popq %rdi
callq 0x390b
movq %rax, %r14
movq %rbx, %rdi
callq 0x12c02
movq 0x18(%rax), %rax
movq %rax, (%r14)
movq %r15, 0x10(%r14)
movq 0x56b4d(%rip), %rax     # 0x63aa0
movq %rax, 0x18(%r14)
movl $0x1c, 0x8(%r14)
movq %r14, %r15
jmp 0xcf6c
pushq $0x16
popq %rdi
callq 0x4f2c
movq %r15, 0x56b2d(%rip)     # 0x63aa0
leaq 0x56966(%rip), %rdi     # 0x638e0
leaq 0xd3c1(%rip), %rsi      # 0x1a342
callq 0x3460
movl 0x56890(%rip), %eax     # 0x6381c
cmpl $0xe, %eax
je 0xcee2
cmpl $0xd, %eax
je 0xcfff
pushq $0x43
popq %rdi
callq 0x4f2c
jmp 0xcfff
leaq 0x56935(%rip), %rdi     # 0x638e0
leaq 0xd382(%rip), %rsi      # 0x1a334
callq 0x3460
pushq $0x16
popq %rdi
callq 0x4f2c
jmp 0xcfff
movq %rbx, %rdi
callq 0x12e72
movq 0x18(%rax), %rax
movq %rax, (%r14)
movl $0x23, 0x8(%r14)
jmp 0xcff8
leaq 0x568ff(%rip), %rdi     # 0x638e0
leaq 0xd345(%rip), %rsi      # 0x1a32d
callq 0x3460
pushq $0x16
popq %rdi
callq 0x4f2c
movq %rbx, (%r14)
movq %r14, 0x56aa1(%rip)     # 0x63aa0
leaq 0x1b8(%rsp), %rdi
callq 0x6316
movl 0x5680a(%rip), %eax     # 0x6381c
cmpl $0x8, %eax
je 0xcecf
movq 0x56a7e(%rip), %rcx     # 0x63aa0
movq (%rcx), %rbx
movl 0x10(%rbx), %ebp
cmpl $0x10, %eax
je 0xce8f
cmpl $0x11, %eax
je 0xce4b
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r14
popq %r15
popq %rbp
retq