// File: /workspace/github_c_makefile_star2_O0/theandrew168[P]squeaky/src/value.c
// Function: value_print
void
value_print(FILE* fp, const struct value* value)
{
    switch (value->type) {
        case VALUE_EMPTY_LIST:
            fprintf(fp, "'()");
            break;
        case VALUE_BOOLEAN:
            fprintf(fp, "#%c", value->as.boolean ? 't' : 'f');
            break;
        case VALUE_CHARACTER:
            // TODO: how to support UTF-8 here?
            if (value->as.character == ' ') {
                fprintf(fp, "#\\space");
            } else if (value->as.character == '\n') {
                fprintf(fp, "#\\newline");
            } else {
                fprintf(fp, "#\\%c", value->as.character);
            }
            break;
        case VALUE_NUMBER:
            fprintf(fp, "%ld", value->as.number);
            break;
        case VALUE_STRING:
            // TODO: handle escapes
            fprintf(fp, "\"%s\"", value->as.string);
            break;
        case VALUE_SYMBOL:
            fprintf(fp, "%s", value->as.symbol);
            break;
        case VALUE_PAIR: {
            fprintf(fp, "(");
            value_print(fp, value->as.pair.car);
            fprintf(fp, " . ");
            value_print(fp, value->as.pair.cdr);
            fprintf(fp, ")");
            break;
        }
        case VALUE_BUILTIN:
            fprintf(fp, "<builtin>");
            break;
        case VALUE_LAMBDA:
            fprintf(fp, "<lambda>");
            break;
        case VALUE_INPUT_PORT:
            fprintf(fp, "<input port>");
            break;
        case VALUE_OUTPUT_PORT:
            fprintf(fp, "<output port>");
            break;
        case VALUE_WINDOW:
            fprintf(fp, "<window>");
            break;
        case VALUE_EVENT: {
            switch (value->as.event->type) {
                case SDL_KEYDOWN:
                case SDL_KEYUP:
                    fprintf(fp, "<event:%s>", "keyboard");
                    break;
                case SDL_MOUSEMOTION:
                    fprintf(fp, "<event:%s>", "mouse-motion");
                    break;
                case SDL_MOUSEBUTTONDOWN:
                case SDL_MOUSEBUTTONUP:
                    fprintf(fp, "<event:%s>", "mouse-button");
                    break;
                case SDL_QUIT:
                    fprintf(fp, "<event:%s>", "quit");
                    break;
                case SDL_WINDOWEVENT:
                    fprintf(fp, "<event:%s>", "window");
                    break;
                default:
                    fprintf(fp, "<event:%s>", "undefined");
            }
            break;
        }
        case VALUE_EOF:
            fprintf(fp, "<EOF>");
            break;
        default:
            fprintf(fp, "<undefined>");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0xd, %eax
ja 0x8669
movq -0x18(%rbp), %rax
leaq 0x2986(%rip), %rcx      # 0xad08
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
leaq 0x2ab6(%rip), %rsi      # 0xae4c
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movb 0x10(%rax), %cl
movl $0x66, %edx
movl $0x74, %eax
testb $0x1, %cl
cmovnel %eax, %edx
leaq 0x2a8c(%rip), %rsi      # 0xae50
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x10(%rbp), %rax
cmpl $0x20, 0x10(%rax)
jne 0x83ee
movq -0x8(%rbp), %rdi
leaq 0x2a6f(%rip), %rsi      # 0xae54
movb $0x0, %al
callq 0x1200
jmp 0x8427
movq -0x10(%rbp), %rax
cmpl $0xa, 0x10(%rax)
jne 0x840c
movq -0x8(%rbp), %rdi
leaq 0x2a59(%rip), %rsi      # 0xae5c
movb $0x0, %al
callq 0x1200
jmp 0x8425
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x10(%rax), %edx
leaq 0x2a48(%rip), %rsi      # 0xae66
movb $0x0, %al
callq 0x1200
jmp 0x8427
jmp 0x867b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x2a2c(%rip), %rsi      # 0xae6b
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x2a11(%rip), %rsi      # 0xae6f
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x29f7(%rip), %rsi      # 0xae74
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x29e3(%rip), %rsi      # 0xae77
movb $0x0, %al
callq 0x1200
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x8350
movq -0x8(%rbp), %rdi
leaq 0x29c2(%rip), %rsi      # 0xae79
movb $0x0, %al
callq 0x1200
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x8350
movq -0x8(%rbp), %rdi
leaq 0x2974(%rip), %rsi      # 0xae4e
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x298c(%rip), %rsi      # 0xae7d
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x297f(%rip), %rsi      # 0xae87
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x2971(%rip), %rsi      # 0xae90
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x2967(%rip), %rsi      # 0xae9d
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x295e(%rip), %rsi      # 0xaeab
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movl (%rax), %eax
movl %eax, -0x1c(%rbp)
subl $0x100, %eax            # imm = 0x100
je 0x8604
jmp 0x8573
movl -0x1c(%rbp), %eax
subl $0x200, %eax            # imm = 0x200
je 0x861f
jmp 0x8583
movl -0x1c(%rbp), %eax
addl $0xfffffd00, %eax       # imm = 0xFFFFFD00
subl $0x2, %eax
jb 0x85b0
jmp 0x8592
movl -0x1c(%rbp), %eax
subl $0x400, %eax            # imm = 0x400
je 0x85ce
jmp 0x859e
movl -0x1c(%rbp), %eax
addl $0xfffffbff, %eax       # imm = 0xFFFFFBFF
subl $0x2, %eax
jb 0x85e9
jmp 0x863a
movq -0x8(%rbp), %rdi
leaq 0x28f9(%rip), %rsi      # 0xaeb4
leaq 0x1dca(%rip), %rdx      # 0xa38c
movb $0x0, %al
callq 0x1200
jmp 0x8653
movq -0x8(%rbp), %rdi
leaq 0x28db(%rip), %rsi      # 0xaeb4
leaq 0x28df(%rip), %rdx      # 0xaebf
movb $0x0, %al
callq 0x1200
jmp 0x8653
movq -0x8(%rbp), %rdi
leaq 0x28c0(%rip), %rsi      # 0xaeb4
leaq 0x28d1(%rip), %rdx      # 0xaecc
movb $0x0, %al
callq 0x1200
jmp 0x8653
movq -0x8(%rbp), %rdi
leaq 0x28a5(%rip), %rsi      # 0xaeb4
leaq 0x1da9(%rip), %rdx      # 0xa3bf
movb $0x0, %al
callq 0x1200
jmp 0x8653
movq -0x8(%rbp), %rdi
leaq 0x288a(%rip), %rsi      # 0xaeb4
leaq 0x1b61(%rip), %rdx      # 0xa192
movb $0x0, %al
callq 0x1200
jmp 0x8653
movq -0x8(%rbp), %rdi
leaq 0x286f(%rip), %rsi      # 0xaeb4
leaq 0x1d8b(%rip), %rdx      # 0xa3d7
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x2879(%rip), %rsi      # 0xaed9
movb $0x0, %al
callq 0x1200
jmp 0x867b
movq -0x8(%rbp), %rdi
leaq 0x286b(%rip), %rsi      # 0xaedf
movb $0x0, %al
callq 0x1200
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)