// File: /workspace/github_c_makefile_star2_O3/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 0x7b84
movl %eax, %ebp
leaq 0x20ca1(%rip), %r13     # 0x28510
cmpl $0x2, (%r13)
jne 0x796c
leaq 0x20c3f(%rip), %rdi     # 0x284c0
leaq 0x21e1(%rip), %rsi      # 0x9a69
callq 0x2160
testl %eax, %eax
je 0x7973
leaq 0x20c24(%rip), %rdi     # 0x284c0
leaq 0x21ce(%rip), %rsi      # 0x9a71
callq 0x2160
testl %eax, %eax
je 0x7993
leaq 0x20c09(%rip), %rdi     # 0x284c0
leaq 0x1a1f(%rip), %rsi      # 0x92dd
callq 0x2160
testl %eax, %eax
je 0x79e2
leaq 0x20bee(%rip), %rdi     # 0x284c0
leaq 0x21a1(%rip), %rsi      # 0x9a7a
callq 0x2160
testl %eax, %eax
je 0x7a0e
leaq 0x20bd3(%rip), %rdi     # 0x284c0
leaq 0x199e(%rip), %rsi      # 0x9292
callq 0x2160
testl %eax, %eax
je 0x7b65
movb $0x0, (%rsp)
xorl %ebx, %ebx
cmpl $0x0, 0x21432(%rip)     # 0x28d40
movl $0x0, %r14d
je 0x7952
xorl %r14d, %r14d
leaq 0x20ba0(%rip), %r15     # 0x284c0
movq %rsp, %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x21e0
incl %r14d
callq 0x60e6
callq 0x7e67
movl %eax, %edi
callq 0x7b84
cmpl $0x0, 0x213f7(%rip)     # 0x28d40
je 0x7952
cmpl $0x2, (%r13)
je 0x7923
movq %rsp, %rdi
callq 0x379b
movswl %ax, %edx
movl %ebp, %edi
movl %r14d, %esi
callq 0x71c6
jmp 0x7b73
movl %ebp, %ebx
jmp 0x7b73
xorl %ebx, %ebx
movl $0x8, %edi
xorl %esi, %esi
callq 0x7bf7
movl %eax, %ebp
leaq 0x20b36(%rip), %rdi     # 0x284c0
leaq 0x20e0(%rip), %rsi      # 0x9a71
jmp 0x79b1
xorl %ebx, %ebx
movl $0x7, %edi
xorl %esi, %esi
callq 0x7bf7
movl %eax, %ebp
leaq 0x20b16(%rip), %rdi     # 0x284c0
leaq 0x20b8(%rip), %rsi      # 0x9a69
callq 0x2160
testl %eax, %eax
jne 0x7b73
movb 0x21384(%rip), %al      # 0x28d48
addb $0x3, %al
movslq %ebp, %rcx
leaq 0x21390(%rip), %rdx     # 0x28d60
movb %al, (%rcx,%rdx)
movl $0x6, %edi
movl $0x1, %esi
jmp 0x7b6e
movslq 0x2135f(%rip), %r14     # 0x28d48
cmpq $0x100, %r14            # imm = 0x100
jl 0x7a1a
leaq 0x21467(%rip), %rdi     # 0x28e60
leaq 0x20ce(%rip), %rsi      # 0x9ace
leaq 0x1cc6(%rip), %rdx      # 0x96cd
callq 0x26d5
jmp 0x7a30
xorl %ebx, %ebx
movl $0x9, %edi
jmp 0x7b6c
leal 0x1(%r14), %eax
movl %eax, 0x21324(%rip)     # 0x28d48
leaq 0x21335(%rip), %rax     # 0x28d60
movb $-0xc, (%r14,%rax)
leaq 0x1803(%rip), %rdi      # 0x923a
callq 0x379b
movswl %ax, %edx
xorl %edi, %edi
xorl %esi, %esi
callq 0x71c6
movl $0x8, %edi
xorl %esi, %esi
callq 0x7bf7
movl %eax, %ebx
movslq 0x212eb(%rip), %rcx     # 0x28d48
cmpq $0x100, %rcx            # imm = 0x100
jl 0x7a88
leaq 0x213f3(%rip), %rdi     # 0x28e60
leaq 0x205a(%rip), %rsi      # 0x9ace
leaq 0x1c52(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x212c2(%rip), %eax     # 0x28d48
jmp 0x7a9c
leal 0x1(%rcx), %eax
movl %eax, 0x212b7(%rip)     # 0x28d48
leaq 0x212c8(%rip), %rdx     # 0x28d60
movb $-0xb, (%rcx,%rdx)
cmpl $0x100, %eax            # imm = 0x100
jl 0x7ac5
leaq 0x213b6(%rip), %rdi     # 0x28e60
leaq 0x201d(%rip), %rsi      # 0x9ace
leaq 0x1c15(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x21285(%rip), %ecx     # 0x28d48
jmp 0x7adb
leal 0x1(%rax), %ecx
movl %ecx, 0x2127a(%rip)     # 0x28d48
cltq
leaq 0x21289(%rip), %rdx     # 0x28d60
movb $-0xa, (%rax,%rdx)
cmpl $0x100, %ecx            # imm = 0x100
jl 0x7b05
leaq 0x21376(%rip), %rdi     # 0x28e60
leaq 0x1fdd(%rip), %rsi      # 0x9ace
leaq 0x1bd5(%rip), %rdx      # 0x96cd
callq 0x26d5
movl 0x21245(%rip), %eax     # 0x28d48
jmp 0x7b1f
incb %r14b
leal 0x1(%rcx), %eax
movl %eax, 0x21237(%rip)     # 0x28d48
movslq %ecx, %rcx
leaq 0x21245(%rip), %rdx     # 0x28d60
movb %r14b, (%rcx,%rdx)
leal 0x1(%rax), %edx
movslq %ebx, %rsi
leaq 0x21234(%rip), %rcx     # 0x28d60
movb %dl, (%rsi,%rcx)
cmpl $0x100, %eax            # imm = 0x100
jl 0x7b52
leaq 0x21323(%rip), %rdi     # 0x28e60
leaq 0x1f8a(%rip), %rsi      # 0x9ace
leaq 0x1b82(%rip), %rdx      # 0x96cd
callq 0x26d5
jmp 0x7b61
leal 0x1(%rax), %edx
movl %edx, 0x211ed(%rip)     # 0x28d48
cltq
movb $-0xb, (%rax,%rcx)
xorl %ebx, %ebx
jmp 0x7b73
xorl %ebx, %ebx
movl $0xa, %edi
xorl %esi, %esi
callq 0x7bf7
movl %ebx, %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq