// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0x80, %rsp
movl %edi, -0x4(%rbp)
movl -0x4(%rbp), %edi
callq 0xa5b0
movl %eax, -0x4(%rbp)
leaq 0x20220(%rip), %rax     # 0x2a540
cmpl $0x2, (%rax)
jne 0xa5a0
leaq 0x201c0(%rip), %rdi     # 0x2a4f0
leaq 0x26b1(%rip), %rsi      # 0xc9e8
callq 0x2150
cmpl $0x0, %eax
jne 0xa395
movl $0x8, %edi
xorl %esi, %esi
callq 0xa640
movl %eax, -0x8(%rbp)
leaq 0x20199(%rip), %rdi     # 0x2a4f0
leaq 0x2692(%rip), %rsi      # 0xc9f0
callq 0x2150
cmpl $0x0, %eax
jne 0xa390
movl 0x20a1a(%rip), %eax     # 0x2ad88
addl $0x3, %eax
movb %al, %dl
movslq -0x8(%rbp), %rcx
leaq 0x20a22(%rip), %rax     # 0x2ada0
movb %dl, (%rax,%rcx)
movl $0x6, %edi
movl $0x1, %esi
callq 0xa640
jmp 0xa599
leaq 0x20154(%rip), %rdi     # 0x2a4f0
leaq 0x264d(%rip), %rsi      # 0xc9f0
callq 0x2150
cmpl $0x0, %eax
jne 0xa401
movl $0x7, %edi
xorl %esi, %esi
callq 0xa640
movl %eax, -0x8(%rbp)
leaq 0x2012d(%rip), %rdi     # 0x2a4f0
leaq 0x261e(%rip), %rsi      # 0xc9e8
callq 0x2150
cmpl $0x0, %eax
jne 0xa3fc
movl 0x209ae(%rip), %eax     # 0x2ad88
addl $0x3, %eax
movb %al, %dl
movslq -0x8(%rbp), %rcx
leaq 0x209b6(%rip), %rax     # 0x2ada0
movb %dl, (%rax,%rcx)
movl $0x6, %edi
movl $0x1, %esi
callq 0xa640
jmp 0xa597
leaq 0x200e8(%rip), %rdi     # 0x2a4f0
leaq 0x1eb7(%rip), %rsi      # 0xc2c6
callq 0x2150
cmpl $0x0, %eax
jne 0xa4b2
movl 0x20965(%rip), %eax     # 0x2ad88
movl %eax, -0xc(%rbp)
movl $0xf, %edi
movl $0x4, %esi
callq 0x9650
leaq 0x1de9(%rip), %rdi      # 0xc225
callq 0x4000
xorl %esi, %esi
movl %esi, %edi
movswl %ax, %edx
callq 0x9c10
movl $0x8, %edi
xorl %esi, %esi
callq 0xa640
movl %eax, -0x8(%rbp)
movl $0xf, %edi
movl $0x5, %esi
callq 0x9650
movl $0xf, %edi
movl $0x6, %esi
callq 0x9650
movl -0xc(%rbp), %edi
addl $0x1, %edi
callq 0xa750
movl 0x208fd(%rip), %eax     # 0x2ad88
addl $0x1, %eax
movb %al, %dl
movslq -0x8(%rbp), %rcx
leaq 0x20905(%rip), %rax     # 0x2ada0
movb %dl, (%rax,%rcx)
movl $0xf, %edi
movl $0x5, %esi
callq 0x9650
jmp 0xa595
leaq 0x20037(%rip), %rdi     # 0x2a4f0
leaq 0x2539(%rip), %rsi      # 0xc9f9
callq 0x2150
cmpl $0x0, %eax
jne 0xa4db
movl $0x9, %edi
xorl %esi, %esi
callq 0xa640
jmp 0xa593
leaq 0x2000e(%rip), %rdi     # 0x2a4f0
leaq 0x1d92(%rip), %rsi      # 0xc27b
callq 0x2150
cmpl $0x0, %eax
jne 0xa504
movl $0xa, %edi
xorl %esi, %esi
callq 0xa640
jmp 0xa591
movb $0x0, -0x70(%rbp)
movl $0x0, -0x10(%rbp)
xorl %eax, %eax
cmpl $0x0, 0x20868(%rip)     # 0x2ad80
movb %al, -0x71(%rbp)
je 0xa52d
leaq 0x2001c(%rip), %rax     # 0x2a540
cmpl $0x2, (%rax)
sete %al
movb %al, -0x71(%rbp)
movb -0x71(%rbp), %al
testb $0x1, %al
jne 0xa536
jmp 0xa566
leaq -0x70(%rbp), %rdi
leaq 0x1ffaf(%rip), %rsi     # 0x2a4f0
callq 0x21c0
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
callq 0x8710
callq 0xa8e0
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %edi
callq 0xa5b0
jmp 0xa50f
movl $0x0, -0x14(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x4000
movw %ax, -0x1a(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0xa58f
movl -0x4(%rbp), %edi
movl -0x10(%rbp), %esi
movswl -0x1a(%rbp), %edx
callq 0x9c10
jmp 0xa591
jmp 0xa593
jmp 0xa595
jmp 0xa597
jmp 0xa599
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)