// File: 0x0584[P]scmin-plus/include/sexpr.hpp
// Function: operator<<(std::ostream&, std::shared_ptr<sexpr>)
ostream& operator<<(ostream& os, sexpr_t expr) {
        if (not expr) os << "(null)"; // this is for debug,
                                      // should be empty string
        else if (expr->isnil()) os << "nil";
        else if (expr->isnum()) os << any_cast<sexpr_number>(*expr->blob).n;
        else if (expr->iscons()) os << any_cast<sexpr_conslist *>(*expr->blob);
        else if (expr->islambda()) os << any_cast<sexpr_lambda>(*expr->blob);
        else os << any_cast<sexpr_text>(*expr->blob).text();
        return os;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rsi, -0xe0(%rbp)
movq %rdi, %rax
movq -0xe0(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
callq 0xb5c0
testb $0x1, %al
jne 0x10bd9
movq -0x8(%rbp), %rdi
leaq 0x10986(%rip), %rsi     # 0x21555
callq 0x32c0
jmp 0x10e00
movq -0xd8(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7270
testb $0x1, %al
jne 0x10bf3
jmp 0x10c08
movq -0x8(%rbp), %rdi
leaq 0x1095e(%rip), %rsi     # 0x2155c
callq 0x32c0
jmp 0x10dfe
movq -0xd8(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7430
testb $0x1, %al
jne 0x10c22
jmp 0x10c64
movq -0xd8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xe8(%rbp)
callq 0x4400
movq %rax, %rdi
callq 0x4520
movq %rax, %rdi
callq 0x10fa0
movq -0xe8(%rbp), %rdi
movsd %xmm0, -0x18(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x3530
jmp 0x10dfc
movq -0xd8(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x72b0
testb $0x1, %al
jne 0x10c7e
jmp 0x10cb9
movq -0xd8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0xf0(%rbp)
callq 0x4400
movq %rax, %rdi
callq 0x4520
movq %rax, %rdi
callq 0x7720
movq -0xf0(%rbp), %rdi
movq %rax, %rsi
callq 0x10fe0
jmp 0x10dfa
movq -0xd8(%rbp), %rdi
callq 0x4400
movq %rax, %rdi
callq 0x7590
testb $0x1, %al
jne 0x10cd3
jmp 0x10d45
movq -0xd8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x100(%rbp)
callq 0x4400
movq %rax, %rdi
callq 0x4520
movq %rax, %rsi
leaq -0x78(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x11330
movq -0x100(%rbp), %rdi
movq -0xf8(%rbp), %rsi
callq 0x11210
jmp 0x10d1a
leaq -0x78(%rbp), %rdi
callq 0x9f80
jmp 0x10df8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x9f80
jmp 0x10e0d
movq -0xd8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq %rax, -0x110(%rbp)
callq 0x4400
movq %rax, %rdi
callq 0x4520
movq %rax, %rsi
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x44d0
movq -0x108(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0x3a60
jmp 0x10d8f
movq -0x110(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x32a0
jmp 0x10da4
leaq -0xa8(%rbp), %rdi
callq 0x31d0
leaq -0xd0(%rbp), %rdi
callq 0x4550
jmp 0x10df8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x10dea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x31d0
leaq -0xd0(%rbp), %rdi
callq 0x4550
jmp 0x10e0d
jmp 0x10dfa
jmp 0x10dfc
jmp 0x10dfe
jmp 0x10e00
movq -0x8(%rbp), %rax
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
movq -0x80(%rbp), %rdi
callq 0x34f0
nopw %cs:(%rax,%rax)