// File: /workspace/github_c_makefile_star2_O3/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 0x2093d(%rip), %r12d    # 0x28d50
movl 0x2092a(%rip), %r13d    # 0x28d44
callq 0x60e6
leaq 0x200ea(%rip), %r15     # 0x28510
xorl %ebx, %ebx
cmpl $0x9, (%r15)
jne 0x8570
leaq 0x20087(%rip), %r14     # 0x284c0
cmpb $0x3a, (%r14)
jne 0x8570
cmpb $0x0, 0x1(%r14)
jne 0x8570
cmpl $0x0, 0x208eb(%rip)     # 0x28d40
je 0x8541
xorl %ebx, %ebx
leaq 0x1f42c(%rip), %rbp     # 0x27890
movb (%r14), %al
cmpb $0x3a, %al
jne 0x8546
cmpb $0x0, 0x1(%r14)
jne 0x8551
callq 0x60e6
cmpl $0x1, %eax
je 0x849e
leaq 0x209d5(%rip), %rdi     # 0x28e60
leaq 0x1719(%rip), %rsi      # 0x9bab
leaq 0x1729(%rip), %rdx      # 0x9bc2
callq 0x26d5
movl 0x208ac(%rip), %eax     # 0x28d50
leal 0x1(%rax), %ecx
movl %ecx, 0x208a3(%rip)     # 0x28d50
cmpl 0x208a5(%rip), %eax     # 0x28d58
jl 0x84bb
movl %ecx, 0x2089d(%rip)     # 0x28d58
cmpl $0x100, %eax            # imm = 0x100
jl 0x84de
leaq 0x20997(%rip), %rdi     # 0x28e60
leaq 0x14d9(%rip), %rsi      # 0x99a9
leaq 0x11f6(%rip), %rdx      # 0x96cd
callq 0x26d5
jmp 0x851e
movq %r14, %rdi
callq 0x379b
movw %ax, (%rbp)
movswl %ax, %edi
callq 0x2ed2
movswl (%rbp), %eax
shrl %eax
movswq %ax, %rax
shlq $0x4, %rax
leaq 0x5d39(%rip), %rcx      # 0xe240
movq 0x8(%rcx,%rax), %rax
movslq 0x2083d(%rip), %rcx     # 0x28d50
leaq 0x21396(%rip), %rdx     # 0x298b0
movq %rax, (%rdx,%rcx,8)
callq 0x60e6
movl (%r15), %eax
incl %ebx
cmpl $0x0, 0x20811(%rip)     # 0x28d40
je 0x853a
cmpl $0x9, %eax
je 0x8464
cmpl $0x9, %eax
je 0x8543
jmp 0x8551
xorl %ebx, %ebx
movb (%r14), %al
cmpb $0x7c, %al
jne 0x8551
cmpb $0x0, 0x1(%r14)
je 0x856b
leaq 0x20908(%rip), %rdi     # 0x28e60
leaq 0x167a(%rip), %rsi      # 0x9bd9
leaq 0x169a(%rip), %rdx      # 0x9c00
callq 0x26d5
callq 0x60e6
xorl %eax, %eax
callq 0x360f
movl %eax, %ebp
movl %ebx, %edi
callq 0x3130
movswl %bp, %ebx
movl %ebx, %ecx
shrl %ecx
movswq %cx, %r14
shlq $0x4, %r14
leaq 0x5caa(%rip), %rbp      # 0xe240
movq 0x8(%rbp,%r14), %rcx
movw %ax, 0x2(%rcx)
movswl %ax, %edi
callq 0x2eda
leal 0x1(%r12), %edi
callq 0x3130
movq 0x8(%rbp,%r14), %rcx
movw %ax, 0x4(%rcx)
movswl %ax, %edi
callq 0x2eda
movl %ebx, %edi
callq 0x77ff
movl $0x4, %edi
movl %eax, %esi
callq 0x6f21
movslq 0x2076c(%rip), %rax     # 0x28d48
cmpq $0x100, %rax            # imm = 0x100
jl 0x8606
leaq 0x20875(%rip), %rdi     # 0x28e60
leaq 0x14dc(%rip), %rsi      # 0x9ace
leaq 0x10d4(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x20744(%rip), %ecx     # 0x28d48
jmp 0x861a
leal 0x1(%rax), %ecx
movl %ecx, 0x20739(%rip)     # 0x28d48
leaq 0x2074a(%rip), %rdx     # 0x28d60
movb $0x54, (%rax,%rdx)
cmpl $0x100, %ecx            # imm = 0x100
jl 0x8644
leaq 0x20837(%rip), %rdi     # 0x28e60
leaq 0x149e(%rip), %rsi      # 0x9ace
leaq 0x1096(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x20706(%rip), %eax     # 0x28d48
jmp 0x865b
leal 0x1(%rcx), %eax
movl %eax, 0x206fb(%rip)     # 0x28d48
movslq %ecx, %rcx
leaq 0x20709(%rip), %rdx     # 0x28d60
movb $-0x2e, (%rcx,%rdx)
cmpl $0x100, %eax            # imm = 0x100
jl 0x8684
leaq 0x207f7(%rip), %rdi     # 0x28e60
leaq 0x145e(%rip), %rsi      # 0x9ace
leaq 0x1056(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x206c6(%rip), %ecx     # 0x28d48
jmp 0x869a
leal 0x1(%rax), %ecx
movl %ecx, 0x206bb(%rip)     # 0x28d48
cltq
leaq 0x206ca(%rip), %rdx     # 0x28d60
movb $0x1d, (%rax,%rdx)
cmpl $0x100, %ecx            # imm = 0x100
jl 0x86c4
leaq 0x207b7(%rip), %rdi     # 0x28e60
leaq 0x141e(%rip), %rsi      # 0x9ace
leaq 0x1016(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x20686(%rip), %eax     # 0x28d48
jmp 0x86db
leal 0x1(%rcx), %eax
movl %eax, 0x2067b(%rip)     # 0x28d48
movslq %ecx, %rcx
leaq 0x20689(%rip), %rdx     # 0x28d60
movb $-0xa, (%rcx,%rdx)
addq %rbp, %r14
addq $0x8, %r14
movslq %eax, %rbx
cmpl $0x100, %eax            # imm = 0x100
jl 0x870e
leaq 0x2076d(%rip), %rdi     # 0x28e60
leaq 0x13d4(%rip), %rsi      # 0x9ace
leaq 0xfcc(%rip), %rdx       # 0x96cd
callq 0x26d5
movl 0x2063c(%rip), %edi     # 0x28d48
jmp 0x8722
leal 0x1(%rbx), %edi
movl %edi, 0x20631(%rip)     # 0x28d48
leaq 0x20642(%rip), %rax     # 0x28d60
movb $0x0, (%rbx,%rax)
incl %edi
callq 0x3130
movq (%r14), %rcx
movw %ax, 0x6(%rcx)
movswl %ax, %edi
callq 0x2eda
movl $0x1, 0x20602(%rip)     # 0x28d44
callq 0x6f9b
cmpl $0xa, (%r15)
jne 0x8763
leaq 0x1fd6c(%rip), %rax     # 0x284c0
cmpb $0x5d, (%rax)
jne 0x8763
cmpb $0x0, 0x1(%rax)
je 0x87ec
leaq 0x206f6(%rip), %rdi     # 0x28e60
leaq 0x1494(%rip), %rsi      # 0x9c05
leaq 0xf55(%rip), %rdx       # 0x96cd
callq 0x26d5
movslq 0x205c4(%rip), %rcx     # 0x28d48
cmpq $0x100, %rcx            # imm = 0x100
jl 0x87af
leaq 0x206cc(%rip), %rdi     # 0x28e60
leaq 0x1333(%rip), %rsi      # 0x9ace
leaq 0xf2b(%rip), %rdx       # 0x96cd
callq 0x26d5
movl 0x2059b(%rip), %eax     # 0x28d48
jmp 0x87c3
leal 0x1(%rcx), %eax
movl %eax, 0x20590(%rip)     # 0x28d48
leaq 0x205a1(%rip), %rdx     # 0x28d60
movb $-0xe, (%rcx,%rdx)
incb %al
leaq 0x20594(%rip), %rcx     # 0x28d60
movb %al, (%rbx,%rcx)
movl %r12d, 0x2057a(%rip)    # 0x28d50
movl %r13d, 0x20567(%rip)    # 0x28d44
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x60e6
jmp 0x877d
nop