// File: Falldog[P]dcinja/src/include/inja/inja.hpp
// Function: inja::Renderer::visit(inja::JsonNode const&)
void visit(const JsonNode& node) {
    if (json_additional_data.contains(node.ptr)) {
      json_eval_stack.push(&(json_additional_data[node.ptr]));
    
    } else if (json_input->contains(node.ptr)) {
      json_eval_stack.push(&(*json_input)[node.ptr]);
    
    } else {
      // Try to evaluate as a no-argument callback
      auto function_data = function_storage.find_function(node.name, 0);
      if (function_data.operation == FunctionStorage::Operation::Callback) {
        Arguments empty_args {};
        auto value = std::make_shared<json>(function_data.callback(empty_args));
        json_tmp_stack.push_back(value);
        json_eval_stack.push(value.get());

      } else {
        json_eval_stack.push(nullptr);
        not_found_stack.emplace(&node);
      }
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
addq $0x38, %rdi
movq -0x10(%rbp), %rsi
addq $0x30, %rsi
callq 0x6cab0
testb $0x1, %al
jne 0x656a5
jmp 0x656e4
movq -0xc0(%rbp), %rdi
movq %rdi, %rax
addq $0x68, %rax
movq %rax, -0xc8(%rbp)
addq $0x38, %rdi
movq -0x10(%rbp), %rsi
addq $0x30, %rsi
callq 0x6cae0
movq -0xc8(%rbp), %rdi
movq %rax, -0x18(%rbp)
leaq -0x18(%rbp), %rsi
callq 0x6c190
jmp 0x6591a
movq -0xc0(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x10(%rbp), %rsi
addq $0x30, %rsi
callq 0x6cab0
testb $0x1, %al
jne 0x65702
jmp 0x65741
movq -0xc0(%rbp), %rax
movq %rax, %rcx
addq $0x68, %rcx
movq %rcx, -0xd0(%rbp)
movq 0x28(%rax), %rdi
movq -0x10(%rbp), %rsi
addq $0x30, %rsi
callq 0x6cb10
movq -0xd0(%rbp), %rdi
movq %rax, -0x20(%rbp)
leaq -0x20(%rbp), %rsi
callq 0x6c190
jmp 0x65918
movq -0xc0(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xd8(%rbp)
movq -0x10(%rbp), %rdi
addq $0x10, %rdi
callq 0xb610
movq -0xd8(%rbp), %rsi
movq %rax, -0x58(%rbp)
movq %rdx, -0x50(%rbp)
movq -0x58(%rbp), %rdx
movq -0x50(%rbp), %rcx
leaq -0x48(%rbp), %rdi
xorl %r8d, %r8d
callq 0x5e170
cmpl $0x2b, -0x48(%rbp)
jne 0x658a1
xorps %xmm0, %xmm0
movaps %xmm0, -0x70(%rbp)
movq $0x0, -0x60(%rbp)
leaq -0x70(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x6cb40
movq -0xe0(%rbp), %rdx
leaq -0x40(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0x6cbd0
jmp 0x657c5
leaq -0x80(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x6cb60
jmp 0x657d7
leaq -0x90(%rbp), %rdi
callq 0x12460
movq -0xc0(%rbp), %rdi
addq $0x50, %rdi
leaq -0x80(%rbp), %rsi
callq 0x6cc30
jmp 0x657f9
movq -0xc0(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xe8(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x6cca0
movq -0xe8(%rbp), %rdi
movq %rax, -0xa8(%rbp)
leaq -0xa8(%rbp), %rsi
callq 0x6c190
jmp 0x65830
leaq -0x80(%rbp), %rdi
callq 0x6c020
leaq -0x70(%rbp), %rdi
callq 0x6ccc0
jmp 0x65902
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x65896
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x12460
jmp 0x65896
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x6c020
leaq -0x70(%rbp), %rdi
callq 0x6ccc0
jmp 0x6590d
movq -0xc0(%rbp), %rdi
addq $0x68, %rdi
movq $0x0, -0xb0(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x6c190
jmp 0x658c5
movq -0xc0(%rbp), %rdi
addq $0xb8, %rdi
movq -0x10(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0x6cd20
jmp 0x658ec
jmp 0x65902
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x6590d
leaq -0x48(%rbp), %rdi
callq 0x2d680
jmp 0x65918
leaq -0x48(%rbp), %rdi
callq 0x2d680
jmp 0x65923
jmp 0x6591a
addq $0xf0, %rsp
popq %rbp
retq
movq -0x98(%rbp), %rdi
callq 0xba60
nop