// File: /workspace/github_c_makefile_star2_O1/afi-lambda[P]a_little_smalltalk/src/parser.c
// Function: keyContinuation
static boolean keyContinuation(boolean superReceiver)
{
    int i, j, argumentCount;
    boolean sent, superTerm;
    object messagesym;
    char pattern[80];

    superReceiver = binaryContinuation(superReceiver);
    if (token == namecolon)
    {
        if (streq(tokenString, "ifTrue:"))
        {
            i = optimizeBlock(BranchIfFalse, false);
            if (streq(tokenString, "ifFalse:"))
            {
                codeArray[i] = codeTop + 3;
                optimizeBlock(Branch, true);
            }
        }
        else if (streq(tokenString, "ifFalse:"))
        {
            i = optimizeBlock(BranchIfTrue, false);
            if (streq(tokenString, "ifTrue:"))
            {
                codeArray[i] = codeTop + 3;
                optimizeBlock(Branch, true);
            }
        }
        else if (streq(tokenString, "whileTrue:"))
        {
            j = codeTop;
            genInstruction(DoSpecial, Duplicate);
            genMessage(false, 0, newSymbol("value"));
            i = optimizeBlock(BranchIfFalse, false);
            genInstruction(DoSpecial, PopTop);
            genInstruction(DoSpecial, Branch);
            genCode(j + 1);
            codeArray[i] = codeTop + 1;
            genInstruction(DoSpecial, PopTop);
        }
        else if (streq(tokenString, "and:"))
            optimizeBlock(AndBranch, false);
        else if (streq(tokenString, "or:"))
            optimizeBlock(OrBranch, false);
        else
        {
            pattern[0] = '\0';
            argumentCount = 0;
            while (parseok && (token == namecolon))
            {
                strcat(pattern, tokenString);
                argumentCount++;
                nextToken();
                superTerm = term();
                binaryContinuation(superTerm);
            }
            sent = false;

            /* check for predefined messages */
            messagesym = newSymbol(pattern);

            if (!sent)
            {
                genMessage(superReceiver, argumentCount, messagesym);
            }
        }
        superReceiver = false;
    }
    return (superReceiver);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
callq 0x7dd4
movl %eax, %ebp
leaq 0x20a65(%rip), %r13     # 0x28520
cmpl $0x2, (%r13)
jne 0x7bbf
leaq 0x20a03(%rip), %rdi     # 0x284d0
leaq 0x1f90(%rip), %rsi      # 0x9a64
callq 0x2160
testl %eax, %eax
je 0x7bc6
leaq 0x209e8(%rip), %rdi     # 0x284d0
leaq 0x1f7d(%rip), %rsi      # 0x9a6c
callq 0x2160
testl %eax, %eax
je 0x7be6
leaq 0x209cd(%rip), %rdi     # 0x284d0
leaq 0x17bb(%rip), %rsi      # 0x92c5
callq 0x2160
testl %eax, %eax
je 0x7c35
leaq 0x209b2(%rip), %rdi     # 0x284d0
leaq 0x1f50(%rip), %rsi      # 0x9a75
callq 0x2160
testl %eax, %eax
je 0x7c61
leaq 0x20997(%rip), %rdi     # 0x284d0
leaq 0x173a(%rip), %rsi      # 0x927a
callq 0x2160
testl %eax, %eax
je 0x7db5
movb $0x0, (%rsp)
xorl %ebx, %ebx
cmpl $0x0, 0x211f6(%rip)     # 0x28d50
movl $0x0, %r14d
je 0x7ba5
cmpl $0x2, (%r13)
jne 0x7ba5
xorl %r14d, %r14d
leaq 0x2095d(%rip), %r15     # 0x284d0
movq %rsp, %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x21e0
incl %r14d
callq 0x6172
callq 0x80af
movl %eax, %edi
callq 0x7dd4
cmpl $0x0, 0x211b4(%rip)     # 0x28d50
je 0x7ba5
cmpl $0x2, (%r13)
je 0x7b76
movq %rsp, %rdi
callq 0x37bd
movswl %ax, %edx
movl %ebp, %edi
movl %r14d, %esi
callq 0x73ac
jmp 0x7dc3
movl %ebp, %ebx
jmp 0x7dc3
xorl %ebx, %ebx
movl $0x8, %edi
xorl %esi, %esi
callq 0x7e47
movl %eax, %ebp
leaq 0x208f3(%rip), %rdi     # 0x284d0
leaq 0x1e88(%rip), %rsi      # 0x9a6c
jmp 0x7c04
xorl %ebx, %ebx
movl $0x7, %edi
xorl %esi, %esi
callq 0x7e47
movl %eax, %ebp
leaq 0x208d3(%rip), %rdi     # 0x284d0
leaq 0x1e60(%rip), %rsi      # 0x9a64
callq 0x2160
testl %eax, %eax
jne 0x7dc3
movb 0x21141(%rip), %al      # 0x28d58
addb $0x3, %al
movslq %ebp, %rcx
leaq 0x2114d(%rip), %rdx     # 0x28d70
movb %al, (%rcx,%rdx)
movl $0x6, %edi
movl $0x1, %esi
jmp 0x7dbe
movslq 0x2111c(%rip), %r14     # 0x28d58
cmpq $0x100, %r14            # imm = 0x100
jl 0x7c6d
leaq 0x21224(%rip), %rdi     # 0x28e70
leaq 0x1e78(%rip), %rsi      # 0x9acb
leaq 0x1a5b(%rip), %rdx      # 0x96b5
callq 0x26d7
jmp 0x7c83
xorl %ebx, %ebx
movl $0x9, %edi
jmp 0x7dbc
leal 0x1(%r14), %eax
movl %eax, 0x210e1(%rip)     # 0x28d58
leaq 0x210f2(%rip), %rax     # 0x28d70
movb $-0xc, (%r14,%rax)
leaq 0x159a(%rip), %rdi      # 0x9224
callq 0x37bd
movswl %ax, %edx
xorl %edi, %edi
xorl %esi, %esi
callq 0x73ac
movl $0x8, %edi
xorl %esi, %esi
callq 0x7e47
movl %eax, %ebx
movslq 0x210a8(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x7cd4
leaq 0x211b1(%rip), %rdi     # 0x28e70
leaq 0x1e05(%rip), %rsi      # 0x9acb
leaq 0x19e8(%rip), %rdx      # 0x96b5
callq 0x26d7
jmp 0x7ce8
leal 0x1(%rax), %ecx
movl %ecx, 0x2107b(%rip)     # 0x28d58
leaq 0x2108c(%rip), %rcx     # 0x28d70
movb $-0xb, (%rax,%rcx)
movslq 0x21069(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x7d13
leaq 0x21172(%rip), %rdi     # 0x28e70
leaq 0x1dc6(%rip), %rsi      # 0x9acb
leaq 0x19a9(%rip), %rdx      # 0x96b5
callq 0x26d7
jmp 0x7d27
leal 0x1(%rax), %ecx
movl %ecx, 0x2103c(%rip)     # 0x28d58
leaq 0x2104d(%rip), %rcx     # 0x28d70
movb $-0xa, (%rax,%rcx)
movslq 0x2102a(%rip), %rax     # 0x28d58
cmpq $0x100, %rax            # imm = 0x100
jl 0x7d52
leaq 0x21133(%rip), %rdi     # 0x28e70
leaq 0x1d87(%rip), %rsi      # 0x9acb
leaq 0x196a(%rip), %rdx      # 0x96b5
callq 0x26d7
jmp 0x7d69
incb %r14b
leal 0x1(%rax), %ecx
movl %ecx, 0x20ffa(%rip)     # 0x28d58
leaq 0x2100b(%rip), %rcx     # 0x28d70
movb %r14b, (%rax,%rcx)
movslq 0x20fe8(%rip), %rax     # 0x28d58
leal 0x1(%rax), %edx
movslq %ebx, %rsi
leaq 0x20ff3(%rip), %rcx     # 0x28d70
movb %dl, (%rsi,%rcx)
cmpq $0x100, %rax            # imm = 0x100
jl 0x7da4
leaq 0x210e1(%rip), %rdi     # 0x28e70
leaq 0x1d35(%rip), %rsi      # 0x9acb
leaq 0x1918(%rip), %rdx      # 0x96b5
callq 0x26d7
jmp 0x7db1
leal 0x1(%rax), %edx
movl %edx, 0x20fab(%rip)     # 0x28d58
movb $-0xb, (%rax,%rcx)
xorl %ebx, %ebx
jmp 0x7dc3
xorl %ebx, %ebx
movl $0xa, %edi
xorl %esi, %esi
callq 0x7e47
movl %ebx, %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq