// File: /workspace/github_cpp_makefile_star2_O1/chen3feng[P]error-handling/result.cpp
// Function: GetIntFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
Result<int> GetIntFromFile(const std::string& filename) {
    // 下面每一步的都依赖上一步操作的结果。
    // TRY 遇到错误就会自动从当前函数返回，否则提取出真正的返回值。
    // 和错误码比，错误不能被无意中忽略；
    // 和异常比，代码更显式看出可能会出错，也一样能自动传播错误，但是代价较低，可控。
    auto&& f = TRY(OpenFile(filename));
    auto&& s = TRY(f.Read());
    auto&& n = TRY(ParseInt(s));
    return n;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0xa8, %rsp
movq %rdi, %rbx
leaq -0x48(%rbp), %r14
movq %r14, %rdi
callq 0x242b
movq 0x20(%r14), %rax
testq %rax, %rax
je 0x266c
cmpl $0x0, 0x8(%rax)
sete %r14b
jmp 0x266f
movb $0x1, %r14b
testb %r14b, %r14b
je 0x2698
leaq -0xa8(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0xb8(%rbp), %rdi
callq 0x3264
jmp 0x26da
movq %rax, -0x78(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x70(%rbp)
testq %rax, %rax
je 0x26be
movq 0x3920(%rip), %rcx      # 0x5fd0
cmpb $0x0, (%rcx)
je 0x26ba
incl 0x8(%rax)
jmp 0x26be
lock
incl 0x8(%rax)
leaq -0x78(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2e84
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x26da
callq 0x30b2
leaq -0x48(%rbp), %rdi
callq 0x2ede
testb %r14b, %r14b
je 0x285d
leaq -0x48(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x2f24
movq -0x28(%rbp), %rax
testq %rax, %rax
je 0x270f
cmpl $0x0, 0x8(%rax)
sete %r14b
jmp 0x2712
movb $0x1, %r14b
testb %r14b, %r14b
je 0x273b
leaq -0x88(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
leaq -0x98(%rbp), %rdi
callq 0x3264
jmp 0x277d
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
testq %rax, %rax
je 0x2761
movq 0x387d(%rip), %rcx      # 0x5fd0
cmpb $0x0, (%rcx)
je 0x275d
incl 0x8(%rax)
jmp 0x2761
lock
incl 0x8(%rax)
leaq -0x68(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2e84
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x277d
callq 0x30b2
leaq -0x48(%rbp), %rdi
callq 0x2fae
testb %r14b, %r14b
je 0x283e
leaq -0x48(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x2571
movq -0x40(%rbp), %rax
testq %rax, %rax
je 0x27b2
cmpl $0x0, 0x8(%rax)
sete %r14b
jmp 0x27b5
movb $0x1, %r14b
testb %r14b, %r14b
je 0x27c0
movl -0x48(%rbp), %r15d
jmp 0x2802
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x50(%rbp)
testq %rax, %rax
je 0x27e6
movq 0x37f8(%rip), %rcx      # 0x5fd0
cmpb $0x0, (%rcx)
je 0x27e2
incl 0x8(%rax)
jmp 0x27e6
lock
incl 0x8(%rax)
leaq -0x58(%rbp), %rsi
movq %rbx, %rdi
xorl %edx, %edx
callq 0x2e84
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x2802
callq 0x30b2
movq -0x38(%rbp), %rdi
testq %rdi, %rdi
je 0x2810
callq 0x30b2
testb %r14b, %r14b
je 0x281f
movl %r15d, (%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rbx)
leaq -0x88(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x283e
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x20e0
leaq -0xa8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x285d
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x20e0
movq %rbx, %rax
addq $0xa8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq -0x50(%rbp), %rdi
testq %rdi, %rdi
je 0x287f
callq 0x30b2
movq -0x38(%rbp), %rdi
testq %rdi, %rdi
je 0x2892
callq 0x30b2
jmp 0x2892
movq %rax, %rbx
leaq -0x88(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x28d7
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x20e0
jmp 0x28d7
movq %rax, %rbx
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x28c9
callq 0x30b2
jmp 0x28c9
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x2fae
jmp 0x28d7
movq %rax, %rbx
leaq -0xa8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2917
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x20e0
jmp 0x2917
movq %rax, %rbx
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x290e
callq 0x30b2
jmp 0x290e
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x2ede
movq %rbx, %rdi
callq 0x2190