// File: 0x0584[P]scmin-plus/src/builtin/builtin.cpp
// Function: builtin::_cond(std::shared_ptr<sexpr> const&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::shared_ptr<sexpr>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::shared_ptr<sexpr>>>>&)
sexpr_t builtin::_cond(const sexpr_t& args, env_t& bindings) {
    sexpr_t walk = args;
    sexpr_t curr;

    while (not walk->isnil()) {
        if (not walk->car()->islist()) {
            cerr << "Err: cond clauses need to be a list" << endl;
            return nullptr;
        }
        curr = walk->car();
        if ((curr->car()->issymb() and
             any_cast<sexpr_text>(*curr->car()->blob).text() == "else")
            or not ::eval(curr->car(), bindings)->isnil()) {
            return builtin::_begin(curr->cdr(), bindings);
        }
        walk = walk->cdr();
    }
    return nil();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x138(%rbp)
movq %rdi, %rax
movq %rax, -0x130(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x43d0
leaq -0x38(%rbp), %rdi
callq 0x6ef0
leaq -0x28(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7270
movb %al, -0x139(%rbp)
jmp 0xe977
movb -0x139(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xe988
jmp 0xee21
leaq -0x28(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0x58(%rbp), %rdi
callq 0xb520
jmp 0xe99f
leaq -0x58(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x72f0
movb %al, -0x13a(%rbp)
jmp 0xe9b8
movb -0x13a(%rbp), %al
xorb $-0x1, %al
movb %al, -0x13b(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x4450
movb -0x13b(%rbp), %al
testb $0x1, %al
jne 0xe9db
jmp 0xea53
movq 0x1f60e(%rip), %rdi     # 0x2dff0
leaq 0x12aa5(%rip), %rsi     # 0x2148e
callq 0x32c0
movq %rax, -0x148(%rbp)
jmp 0xe9f7
movq -0x148(%rbp), %rdi
movq 0x1f58b(%rip), %rsi     # 0x2df90
callq 0x32f0
jmp 0xea0c
movq -0x138(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4570
movl $0x1, -0x5c(%rbp)
jmp 0xee36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xee58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x4450
jmp 0xee58
leaq -0x28(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0x70(%rbp), %rdi
callq 0xb520
jmp 0xea6a
leaq -0x38(%rbp), %rdi
movq %rdi, -0x150(%rbp)
leaq -0x70(%rbp), %rsi
movq %rsi, -0x158(%rbp)
callq 0x4420
movq -0x158(%rbp), %rdi
callq 0x4450
movq -0x150(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
movb $0x0, -0xd9(%rbp)
movb $0x0, -0xda(%rbp)
movb $0x0, -0xdb(%rbp)
movb $0x0, -0x101(%rbp)
movb $0x0, -0x102(%rbp)
leaq -0x80(%rbp), %rdi
callq 0xb520
jmp 0xeace
leaq -0x80(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7500
movb %al, -0x159(%rbp)
jmp 0xeae7
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0xeaf6
jmp 0xeb9c
leaq -0x38(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0xd8(%rbp), %rdi
callq 0xb520
jmp 0xeb10
movb $0x1, -0xd9(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x4520
movq %rax, -0x168(%rbp)
jmp 0xeb34
movq -0x168(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x44d0
jmp 0xeb49
movb $0x1, -0xda(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3a60
jmp 0xeb65
movb $0x1, -0xdb(%rbp)
leaq 0x1293f(%rip), %rsi     # 0x214b2
leaq -0xa0(%rbp), %rdi
callq 0x10e20
movb %al, -0x169(%rbp)
jmp 0xeb87
movb -0x169(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x16a(%rbp)
jne 0xec07
jmp 0xeb9c
leaq -0x38(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0x100(%rbp), %rdi
callq 0xb520
jmp 0xebb6
movb $0x1, -0x101(%rbp)
movq -0x18(%rbp), %rdx
leaq -0xf0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x19aa0
jmp 0xebd6
movb $0x1, -0x102(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7270
movb %al, -0x16b(%rbp)
jmp 0xebf9
movb -0x16b(%rbp), %al
xorb $-0x1, %al
movb %al, -0x16a(%rbp)
movb -0x16a(%rbp), %al
movb %al, -0x16c(%rbp)
testb $0x1, -0x102(%rbp)
jne 0xec1e
jmp 0xec2a
leaq -0xf0(%rbp), %rdi
callq 0x4450
testb $0x1, -0x101(%rbp)
jne 0xec35
jmp 0xec41
leaq -0x100(%rbp), %rdi
callq 0x4450
testb $0x1, -0xdb(%rbp)
jne 0xec4c
jmp 0xec58
leaq -0xa0(%rbp), %rdi
callq 0x31d0
testb $0x1, -0xda(%rbp)
jne 0xec63
jmp 0xec6f
leaq -0xc8(%rbp), %rdi
callq 0x4550
testb $0x1, -0xd9(%rbp)
jne 0xec7a
jmp 0xec86
leaq -0xd8(%rbp), %rdi
callq 0x4450
leaq -0x80(%rbp), %rdi
callq 0x4450
movb -0x16c(%rbp), %al
testb $0x1, %al
jne 0xec9e
jmp 0xede6
leaq -0x38(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0x118(%rbp), %rdi
callq 0xb440
jmp 0xecb8
movq -0x138(%rbp), %rdi
movq -0x18(%rbp), %rdx
leaq -0x118(%rbp), %rsi
callq 0xe780
jmp 0xecd1
leaq -0x118(%rbp), %rdi
callq 0x4450
movl $0x1, -0x5c(%rbp)
jmp 0xee36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xedbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xeda5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xed8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xed73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xed5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x102(%rbp)
jne 0xed4c
jmp 0xed58
leaq -0xf0(%rbp), %rdi
callq 0x4450
jmp 0xed5a
testb $0x1, -0x101(%rbp)
jne 0xed65
jmp 0xed71
leaq -0x100(%rbp), %rdi
callq 0x4450
jmp 0xed73
testb $0x1, -0xdb(%rbp)
jne 0xed7e
jmp 0xed8a
leaq -0xa0(%rbp), %rdi
callq 0x31d0
jmp 0xed8c
testb $0x1, -0xda(%rbp)
jne 0xed97
jmp 0xeda3
leaq -0xc8(%rbp), %rdi
callq 0x4550
jmp 0xeda5
testb $0x1, -0xd9(%rbp)
jne 0xedb0
jmp 0xedbc
leaq -0xd8(%rbp), %rdi
callq 0x4450
jmp 0xedbe
leaq -0x80(%rbp), %rdi
callq 0x4450
jmp 0xee58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x4450
jmp 0xee58
leaq -0x28(%rbp), %rdi
callq 0x4400
movq %rax, %rsi
leaq -0x128(%rbp), %rdi
callq 0xb440
jmp 0xee00
leaq -0x28(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x4420
leaq -0x128(%rbp), %rdi
callq 0x4450
jmp 0xe95e
movq -0x138(%rbp), %rdi
callq 0x78f0
jmp 0xee2f
movl $0x1, -0x5c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x4450
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0x130(%rbp), %rax
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x4450
leaq -0x28(%rbp), %rdi
callq 0x4450
movq -0x40(%rbp), %rdi
callq 0x34f0
nopw %cs:(%rax,%rax)