// File: /workspace/github_c_makefile_star2_O1/afi-lambda[P]a_little_smalltalk/src/parser.c
// Function: block
static void block()
{
    int saveTemporary, argumentCount, fixLocation;
    object tempsym, newBlk;
    enum blockstatus savebstat;

    saveTemporary = temporaryTop;
    savebstat = blockstat;
    argumentCount = 0;
    nextToken();
    if ((token == binary) && streq(tokenString, ":"))
    {
        while (parseok && (token == binary) && streq(tokenString,":"))
        {
            if (nextToken() != nameconst)
                compilError(selector, "name must follow colon",
                                 "in block argument list");
            if (++temporaryTop > maxTemporary)
                maxTemporary = temporaryTop;
            argumentCount++;
            if (temporaryTop > temporaryLimit)
                compilError(selector, "too many temporaries in method", "");
            else
            {
                tempsym = newSymbol(tokenString);
                temporaryName[temporaryTop] = charPtr(tempsym);
            }
            nextToken();
        }
        if ((token != binary) || !streq(tokenString, "|"))
            compilError(selector, "block argument list must be terminated",
                             "by |");
        nextToken();
    }
    newBlk = newBlock();
    basicAtPut(newBlk, argumentCountInBlock, newInteger(argumentCount));
    basicAtPut(newBlk, argumentLocationInBlock,
               newInteger(saveTemporary + 1));
    genInstruction(PushLiteral, genLiteral(newBlk));
    genInstruction(PushConstant, contextConst);
    genInstruction(DoPrimitive, 2);
    genCode(29);
    genInstruction(DoSpecial, Branch);
    fixLocation = codeTop;
    genCode(0);
    /*genInstruction(DoSpecial, PopTop);*/
    basicAtPut(newBlk, bytecountPositionInBlock, newInteger(codeTop+1));
    blockstat = InBlock;
    body();
    if ((token == closing) && streq(tokenString, "]"))
        nextToken();
    else
        compilError(selector, "block not terminated by ]", "");
    genInstruction(DoSpecial, StackReturn);
    codeArray[fixLocation] = codeTop + 1;
    temporaryTop = saveTemporary;
    blockstat = savebstat;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl 0x206d1(%rip), %r12d    # 0x28d60
movl 0x206be(%rip), %r15d    # 0x28d54
callq 0x6172
leaq 0x1fe7e(%rip), %r14     # 0x28520
xorl %ebx, %ebx
cmpl $0x9, (%r14)
jne 0x882e
leaq 0x1fe1b(%rip), %rdi     # 0x284d0
leaq 0xbb8(%rip), %rsi       # 0x9274
callq 0x2160
testl %eax, %eax
jne 0x882e
cmpl $0x0, 0x20680(%rip)     # 0x28d50
setne %al
cmpl $0x9, (%r14)
sete %bpl
andb %bpl, %al
xorl %ebx, %ebx
cmpb $0x1, %al
jne 0x87f3
leaq 0x1fde1(%rip), %rdi     # 0x284d0
leaq 0xb7e(%rip), %rsi       # 0x9274
callq 0x2160
testl %eax, %eax
jne 0x87f3
movl $0x1, %ecx
leaq 0x1fdc1(%rip), %r13     # 0x284d0
movl %ecx, %ebx
callq 0x6172
cmpl $0x1, %eax
je 0x8735
leaq 0x2074e(%rip), %rdi     # 0x28e70
leaq 0x1483(%rip), %rsi      # 0x9bac
leaq 0x1493(%rip), %rdx      # 0x9bc3
callq 0x26d7
movl 0x20625(%rip), %eax     # 0x28d60
leal 0x1(%rax), %ecx
movl %ecx, 0x2061c(%rip)     # 0x28d60
cmpl 0x2061e(%rip), %eax     # 0x28d68
jl 0x8752
movl %ecx, 0x20616(%rip)     # 0x28d68
cmpl $0x100, %eax            # imm = 0x100
jl 0x8775
leaq 0x20710(%rip), %rdi     # 0x28e70
leaq 0x1236(%rip), %rsi      # 0x999d
leaq 0xf47(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x87bc
movq %r13, %rdi
callq 0x37bd
leaq 0x1f10c(%rip), %rbp     # 0x27890
movw %ax, (%rbp)
movswl %ax, %edi
callq 0x2f18
movswl (%rbp), %eax
shrl %eax
movswq %ax, %rax
shlq $0x4, %rax
leaq 0x5a9b(%rip), %rcx      # 0xe240
movq 0x8(%rcx,%rax), %rax
movslq 0x205af(%rip), %rcx     # 0x28d60
leaq 0x21108(%rip), %rdx     # 0x298c0
movq %rax, (%rdx,%rcx,8)
callq 0x6172
movl (%r14), %eax
cmpl $0x9, %eax
sete %bpl
cmpl $0x0, 0x2057e(%rip)     # 0x28d50
je 0x87f3
cmpl $0x9, %eax
jne 0x87f3
movq %r13, %rdi
leaq 0xa91(%rip), %rsi       # 0x9274
callq 0x2160
leal 0x1(%rbx), %ecx
testl %eax, %eax
je 0x870f
testb %bpl, %bpl
je 0x880f
leaq 0x1fcd1(%rip), %rdi     # 0x284d0
leaq 0x13fe(%rip), %rsi      # 0x9c04
callq 0x2160
testl %eax, %eax
je 0x8829
leaq 0x2065a(%rip), %rdi     # 0x28e70
leaq 0x13bd(%rip), %rsi      # 0x9bda
leaq 0x13dd(%rip), %rdx      # 0x9c01
callq 0x26d7
callq 0x6172
xorl %eax, %eax
callq 0x3631
movl %eax, %ebp
movl %ebx, %edi
callq 0x314c
movswl %bp, %ebx
movl %ebx, %ecx
shrl %ecx
movswq %cx, %r13
shlq $0x4, %r13
leaq 0x59ec(%rip), %rbp      # 0xe240
movq 0x8(%rbp,%r13), %rcx
movw %ax, 0x2(%rcx)
movswl %ax, %edi
callq 0x2f20
leal 0x1(%r12), %edi
callq 0x314c
movq 0x8(%rbp,%r13), %rcx
movw %ax, 0x4(%rcx)
movswl %ax, %edi
callq 0x2f20
movl %ebx, %edi
callq 0x7a4b
movl $0x4, %edi
movl %eax, %esi
callq 0x70d3
movslq 0x204be(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x88be
leaq 0x205c7(%rip), %rdi     # 0x28e70
leaq 0x121b(%rip), %rsi      # 0x9acb
leaq 0xdfe(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x88d2
leal 0x1(%rax), %ecx
movl %ecx, 0x20491(%rip)     # 0x28d58
leaq 0x204a2(%rip), %rcx     # 0x28d70
movb $0x54, (%rax,%rcx)
movslq 0x2047f(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x88fd
leaq 0x20588(%rip), %rdi     # 0x28e70
leaq 0x11dc(%rip), %rsi      # 0x9acb
leaq 0xdbf(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x8911
leal 0x1(%rax), %ecx
movl %ecx, 0x20452(%rip)     # 0x28d58
leaq 0x20463(%rip), %rcx     # 0x28d70
movb $-0x2e, (%rax,%rcx)
movslq 0x20440(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x893c
leaq 0x20549(%rip), %rdi     # 0x28e70
leaq 0x119d(%rip), %rsi      # 0x9acb
leaq 0xd80(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x8950
leal 0x1(%rax), %ecx
movl %ecx, 0x20413(%rip)     # 0x28d58
leaq 0x20424(%rip), %rcx     # 0x28d70
movb $0x1d, (%rax,%rcx)
movslq 0x20401(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x897b
leaq 0x2050a(%rip), %rdi     # 0x28e70
leaq 0x115e(%rip), %rsi      # 0x9acb
leaq 0xd41(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x898f
leal 0x1(%rax), %ecx
movl %ecx, 0x203d4(%rip)     # 0x28d58
leaq 0x203e5(%rip), %rcx     # 0x28d70
movb $-0xa, (%rax,%rcx)
addq %rbp, %r13
addq $0x8, %r13
movslq 0x203bb(%rip), %rbx     # 0x28d58
cmpq $0x100, %rbx            # imm = 0x100
jl 0x89c2
leaq 0x204c3(%rip), %rdi     # 0x28e70
leaq 0x1117(%rip), %rsi      # 0x9acb
leaq 0xcfa(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x89d6
leal 0x1(%rbx), %eax
movl %eax, 0x2038d(%rip)     # 0x28d58
leaq 0x2039e(%rip), %rax     # 0x28d70
movb $0x0, (%rbx,%rax)
movl 0x2037c(%rip), %edi     # 0x28d58
incl %edi
callq 0x314c
movq (%r13), %rcx
movw %ax, 0x6(%rcx)
movswl %ax, %edi
callq 0x2f20
movl $0x1, 0x20357(%rip)     # 0x28d54
callq 0x714d
cmpl $0xa, (%r14)
jne 0x8a23
leaq 0x1fac1(%rip), %rdi     # 0x284d0
leaq 0x1208(%rip), %rsi      # 0x9c1e
callq 0x2160
testl %eax, %eax
je 0x8aab
leaq 0x20446(%rip), %rdi     # 0x28e70
leaq 0x11d5(%rip), %rsi      # 0x9c06
leaq 0xc7d(%rip), %rdx       # 0x96b5
callq 0x26d7
movslq 0x20314(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x8a68
leaq 0x2041d(%rip), %rdi     # 0x28e70
leaq 0x1071(%rip), %rsi      # 0x9acb
leaq 0xc54(%rip), %rdx       # 0x96b5
callq 0x26d7
jmp 0x8a7c
leal 0x1(%rax), %ecx
movl %ecx, 0x202e7(%rip)     # 0x28d58
leaq 0x202f8(%rip), %rcx     # 0x28d70
movb $-0xe, (%rax,%rcx)
movb 0x202d6(%rip), %al      # 0x28d58
incb %al
leaq 0x202e5(%rip), %rcx     # 0x28d70
movb %al, (%rbx,%rcx)
movl %r12d, 0x202cb(%rip)    # 0x28d60
movl %r15d, 0x202b8(%rip)    # 0x28d54
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x6172
jmp 0x8a3d
nop