// File: /workspace/github_cpp_makefile_star2_O3/yhirose[P]fizzbuzzlang/fzbz.cc
// Function: eval(peg::AstBase<peg::EmptyType> const&, std::shared_ptr<Environment>)
Value eval(const Ast& ast, shared_ptr<Environment> env) {
  switch (ast.tag) {
    case "TERNARY"_:
      return eval_ternary(ast, env);
    case "CONDITION"_:
      return eval_condition(ast, env);
    case "MULTIPLICATIVE"_:
      return eval_multiplicative(ast, env);
    case "CALL"_:
      return eval_call(ast, env);
    case "FOR"_:
      return eval_for(ast, env);
    case "Identifier"_:
      return Value(env->get_value(ast.token));
    case "String"_:
      return Value(ast.token);
    case "Number"_:
      return Value(ast.token_to_number<long>());
    default:
      return Value();
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x60, %rsp
movq %rdi, %rbx
movl 0xa0(%rsi), %eax
cmpl $0x25d361, %eax         # imm = 0x25D361
jg 0x8c73
cmpl $0xc31de054, %eax       # imm = 0xC31DE054
jg 0x8cc4
cmpl $0xa93e7fa7, %eax       # imm = 0xA93E7FA7
je 0x8d50
cmpl $0xbd90f163, %eax       # imm = 0xBD90F163
jne 0x8dda
movq 0xb8(%rsi), %rdi
movq 0xb0(%rsi), %rsi
addq %rdi, %rsi
leaq -0x68(%rbp), %r14
movq $0x0, (%r14)
movq %r14, %rdx
movl $0xa, %ecx
callq 0x40f63
movq (%r14), %rax
movq %rax, (%rbx)
movb $0x2, 0x20(%rbx)
jmp 0x8e5d
cmpl $0x36a5c242, %eax       # imm = 0x36A5C242
jg 0x8d0a
cmpl $0x25d362, %eax         # imm = 0x25D362
je 0x8d79
cmpl $0xb538ed3, %eax        # imm = 0xB538ED3
jne 0x8dda
movq (%rdx), %rax
movq %rax, -0x50(%rbp)
movq 0x8(%rdx), %rax
movq %rax, -0x48(%rbp)
testq %rax, %rax
je 0x8e17
movq 0x552bd(%rip), %rcx     # 0x5df70
cmpb $0x0, (%rcx)
je 0x8e13
incl 0x8(%rax)
jmp 0x8e17
cmpl $0xc31de055, %eax       # imm = 0xC31DE055
je 0x8d9e
cmpl $0x1323b, %eax          # imm = 0x1323B
jne 0x8dda
movq (%rdx), %rax
movq %rax, -0x20(%rbp)
movq 0x8(%rdx), %rax
movq %rax, -0x18(%rbp)
testq %rax, %rax
je 0x8e2d
movq 0x55277(%rip), %rcx     # 0x5df70
cmpb $0x0, (%rcx)
je 0x8e29
incl 0x8(%rax)
jmp 0x8e2d
cmpl $0x36a5c243, %eax       # imm = 0x36A5C243
je 0x8db1
cmpl $0x63cc1e70, %eax       # imm = 0x63CC1E70
jne 0x8dda
movq (%rdx), %rax
movq %rax, -0x40(%rbp)
movq 0x8(%rdx), %rax
movq %rax, -0x38(%rbp)
testq %rax, %rax
je 0x8e43
movq 0x55231(%rip), %rcx     # 0x5df70
cmpb $0x0, (%rcx)
je 0x8e3f
incl 0x8(%rax)
jmp 0x8e43
movq (%rdx), %rax
movq %rax, -0x60(%rbp)
movq 0x8(%rdx), %rax
movq %rax, -0x58(%rbp)
testq %rax, %rax
je 0x8deb
movq 0x55201(%rip), %rcx     # 0x5df70
cmpb $0x0, (%rcx)
je 0x8de7
incl 0x8(%rax)
jmp 0x8deb
movq (%rdx), %rax
movq %rax, -0x30(%rbp)
movq 0x8(%rdx), %rax
movq %rax, -0x28(%rbp)
testq %rax, %rax
je 0x8e01
movq 0x551dc(%rip), %rcx     # 0x5df70
cmpb $0x0, (%rcx)
je 0x8dfd
incl 0x8(%rax)
jmp 0x8e01
movups 0xb0(%rsi), %xmm0
movups %xmm0, (%rbx)
movb $0x3, 0x20(%rbx)
jmp 0x8e5d
movq (%rdx), %rdi
movq 0xb0(%rsi), %rax
movq 0xb8(%rsi), %rdx
movq %rax, %rsi
callq 0xde02
movq %rbx, %rdi
movq %rax, %rsi
callq 0x39b56
jmp 0x8e5d
movq $0x0, (%rbx)
movb $0x0, 0x20(%rbx)
jmp 0x8e5d
lock
incl 0x8(%rax)
leaq -0x60(%rbp), %rdx
movq %rbx, %rdi
callq 0x89f0
movq -0x58(%rbp), %rdi
jmp 0x8e53
lock
incl 0x8(%rax)
leaq -0x30(%rbp), %rdx
movq %rbx, %rdi
callq 0x91d5
movq -0x28(%rbp), %rdi
jmp 0x8e53
lock
incl 0x8(%rax)
leaq -0x50(%rbp), %rdx
movq %rbx, %rdi
callq 0x8ea6
movq -0x48(%rbp), %rdi
jmp 0x8e53
lock
incl 0x8(%rax)
leaq -0x20(%rbp), %rdx
movq %rbx, %rdi
callq 0x9305
movq -0x18(%rbp), %rdi
jmp 0x8e53
lock
incl 0x8(%rax)
leaq -0x40(%rbp), %rdx
movq %rbx, %rdi
callq 0x8ffa
movq -0x38(%rbp), %rdi
testq %rdi, %rdi
je 0x8e5d
callq 0x123fc
movq %rbx, %rax
addq $0x60, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
movq -0x38(%rbp), %rdi
jmp 0x8e94
movq %rax, %rbx
movq -0x18(%rbp), %rdi
jmp 0x8e94
movq %rax, %rbx
movq -0x48(%rbp), %rdi
jmp 0x8e94
movq %rax, %rbx
movq -0x28(%rbp), %rdi
jmp 0x8e94
movq %rax, %rbx
movq -0x58(%rbp), %rdi
testq %rdi, %rdi
je 0x8e9e
callq 0x123fc
movq %rbx, %rdi
callq 0x8420