// File: /workspace/github_c_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x50, %rsp
callq 0x7213
movl %eax, %ebx
leaq 0x214ef(%rip), %r12     # 0x28510
cmpl $0x2, (%r12)
jne 0x7204
leaq 0x2148d(%rip), %rdi     # 0x284c0
leaq 0x2a0f(%rip), %rsi      # 0x9a49
callq 0x2150
testl %eax, %eax
je 0x7100
leaq 0x21472(%rip), %rdi     # 0x284c0
leaq 0x29fc(%rip), %rsi      # 0x9a51
callq 0x2150
testl %eax, %eax
je 0x711e
leaq 0x21457(%rip), %rdi     # 0x284c0
leaq 0x2257(%rip), %rsi      # 0x92c7
callq 0x2150
testl %eax, %eax
je 0x7167
leaq 0x2143c(%rip), %rdi     # 0x284c0
leaq 0x29cf(%rip), %rsi      # 0x9a5a
callq 0x2150
testl %eax, %eax
je 0x71f4
leaq 0x21421(%rip), %rdi     # 0x284c0
leaq 0x21d6(%rip), %rsi      # 0x927c
callq 0x2150
testl %eax, %eax
je 0x71f8
movq %rsp, %r14
movb $0x0, (%r14)
xorl %ebp, %ebp
pushq $0x2
popq %rax
leaq 0x213fa(%rip), %r15     # 0x284c0
cmpl $0x0, 0x21c73(%rip)     # 0x28d40
je 0x71dc
cmpl $0x2, %eax
jne 0x71dc
movq %r14, %rdi
movq %r15, %rsi
callq 0x21c0
incl %ebp
callq 0x5d93
callq 0x749e
movl %eax, %edi
callq 0x7213
movl (%r12), %eax
jmp 0x70c6
pushq $0x8
popq %rdi
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x727d
movl %eax, %ebp
leaq 0x213ab(%rip), %rdi     # 0x284c0
leaq 0x2935(%rip), %rsi      # 0x9a51
jmp 0x713a
pushq $0x7
popq %rdi
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x727d
movl %eax, %ebp
leaq 0x2138d(%rip), %rdi     # 0x284c0
leaq 0x290f(%rip), %rsi      # 0x9a49
callq 0x2150
testl %eax, %eax
jne 0x7204
movb 0x21bfb(%rip), %al      # 0x28d48
addb $0x3, %al
movslq %ebp, %rcx
leaq 0x21c07(%rip), %rdx     # 0x28d60
movb %al, (%rcx,%rdx)
pushq $0x6
popq %rdi
pushq $0x1
popq %rsi
jmp 0x71ff
movl 0x21bdb(%rip), %ebp     # 0x28d48
movl $0xf4, %edi
callq 0x7361
leaq 0x20a6(%rip), %rdi      # 0x9224
callq 0x3368
movswl %ax, %edx
xorl %ebx, %ebx
xorl %edi, %edi
xorl %esi, %esi
callq 0x6abe
pushq $0x8
popq %rdi
xorl %esi, %esi
callq 0x727d
movl %eax, %r14d
movl $0xf5, %edi
callq 0x7361
movl $0xf6, %edi
callq 0x7361
incl %ebp
movl %ebp, %edi
callq 0x7361
movb 0x21b87(%rip), %al      # 0x28d48
incb %al
movslq %r14d, %rcx
leaq 0x21b93(%rip), %rdx     # 0x28d60
movb %al, (%rcx,%rdx)
movl $0xf5, %edi
callq 0x7361
jmp 0x7204
movq %rsp, %rdi
callq 0x3368
movswl %ax, %edx
movl %ebx, %edi
movl %ebp, %esi
callq 0x6abe
xorl %ebx, %ebx
jmp 0x7204
pushq $0x9
jmp 0x71fa
pushq $0xa
popq %rdi
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x727d
movl %ebx, %eax
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq