// File: Falldog[P]dcinja/src/include/inja/inja.hpp
// Function: inja::Renderer::visit(inja::ForObjectStatementNode const&)
void visit(const ForObjectStatementNode& node) {
    auto result = eval_expression_list(node.condition);
    if (!result->is_object()) {
      throw_renderer_error("object must be an object", node);
    }

    if (!current_loop_data->empty()) {
      (*current_loop_data)["parent"] = std::move(*current_loop_data);
    }

    size_t index = 0;
    (*current_loop_data)["is_first"] = true;
    (*current_loop_data)["is_last"] = (result->size() <= 1);
    for (auto it = result->begin(); it != result->end(); ++it) {
      json_additional_data[static_cast<std::string>(node.key)] = it.key();
      json_additional_data[static_cast<std::string>(node.value)] = it.value();

      (*current_loop_data)["index"] = index;
      (*current_loop_data)["index1"] = index + 1;
      if (index == 1) {
        (*current_loop_data)["is_first"] = false;
      }
      if (index == result->size() - 1) {
        (*current_loop_data)["is_last"] = true;
      }

      node.body.accept(*this);
      ++index;
    }

    json_additional_data[static_cast<std::string>(node.key)].clear();
    json_additional_data[static_cast<std::string>(node.value)].clear();
    if (!(*current_loop_data)["parent"].empty()) {
      *current_loop_data = std::move((*current_loop_data)["parent"]);
    } else {
      current_loop_data = &json_additional_data["loop"];
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0x1f0(%rbp)
movq -0x10(%rbp), %rdx
addq $0x10, %rdx
leaq -0x20(%rbp), %rdi
callq 0x7f660
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4a990
testb $0x1, %al
jne 0x69a1c
leaq -0x41(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0xba70
movq -0x1f8(%rbp), %rdx
leaq 0x5db7c(%rip), %rsi     # 0xc7532
leaq -0x40(%rbp), %rdi
callq 0x10b90
jmp 0x699c1
movq -0x1f0(%rbp), %rdi
movq -0x10(%rbp), %rdx
leaq -0x40(%rbp), %rsi
callq 0x726f0
jmp 0x699d7
leaq -0x40(%rbp), %rdi
callq 0xbb98
leaq -0x41(%rbp), %rdi
callq 0xb600
jmp 0x69a1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x69a0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x40(%rbp), %rdi
callq 0xbb98
leaq -0x41(%rbp), %rdi
callq 0xb600
jmp 0x6a1d4
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
callq 0x742d0
testb $0x1, %al
jne 0x69a99
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rsi
leaq -0x68(%rbp), %rdi
callq 0x4a8d0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5dab7(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x200(%rbp)
jmp 0x69a64
movq -0x200(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x12800
leaq -0x68(%rbp), %rdi
callq 0x12460
jmp 0x69a99
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq $0x0, -0x70(%rbp)
movb $0x1, -0x81(%rbp)
leaq -0x80(%rbp), %rdi
leaq -0x81(%rbp), %rsi
callq 0x741a0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5da4a(%rip), %rsi     # 0xc7514
callq 0x65200
movq %rax, -0x208(%rbp)
jmp 0x69ad8
movq -0x208(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movq %rsi, -0x218(%rbp)
callq 0x12800
movq -0x218(%rbp), %rdi
callq 0x12460
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4bb10
subq $0x2, %rax
setb -0x99(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0x99(%rbp), %rsi
callq 0x741a0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d9e1(%rip), %rsi     # 0xc751d
callq 0x65200
movq %rax, -0x210(%rbp)
jmp 0x69b4a
movq -0x210(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x12800
leaq -0x98(%rbp), %rdi
callq 0x12460
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rsi
leaq -0xc0(%rbp), %rdi
callq 0x12870
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rsi
leaq -0xe0(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x128e0
movq -0x228(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x128b0
movb %al, -0x219(%rbp)
jmp 0x69bbb
movb -0x219(%rbp), %al
testb $0x1, %al
jne 0x69bca
jmp 0x6a015
leaq -0xc0(%rbp), %rdi
callq 0x12920
movq %rax, -0x230(%rbp)
jmp 0x69bdf
movq -0x230(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x80440
jmp 0x69bf4
movq -0x1f0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x238(%rbp)
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x110(%rbp), %rdi
callq 0xb230
jmp 0x69c1c
movq -0x238(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x126a0
movq %rax, -0x240(%rbp)
jmp 0x69c38
movq -0x240(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
movq %rsi, -0x250(%rbp)
callq 0x12800
leaq -0x110(%rbp), %rdi
callq 0xbb98
movq -0x250(%rbp), %rdi
callq 0x12460
leaq -0xc0(%rbp), %rdi
callq 0x80490
movq %rax, -0x248(%rbp)
jmp 0x69c7f
movq -0x248(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x4bc70
jmp 0x69c94
movq -0x1f0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x258(%rbp)
movq -0x10(%rbp), %rsi
addq $0x88, %rsi
leaq -0x140(%rbp), %rdi
callq 0xb230
jmp 0x69cbf
movq -0x258(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x126a0
movq %rax, -0x260(%rbp)
jmp 0x69cdb
movq -0x260(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movq %rsi, -0x270(%rbp)
callq 0x12800
leaq -0x140(%rbp), %rdi
callq 0xbb98
movq -0x270(%rbp), %rdi
callq 0x12460
leaq -0x150(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x54200
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d7f6(%rip), %rsi     # 0xc7525
callq 0x65200
movq %rax, -0x268(%rbp)
jmp 0x69d3d
movq -0x268(%rbp), %rdi
leaq -0x150(%rbp), %rsi
movq %rsi, -0x280(%rbp)
callq 0x12800
movq -0x280(%rbp), %rdi
callq 0x12460
movq -0x70(%rbp), %rax
incq %rax
movq %rax, -0x168(%rbp)
leaq -0x160(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x79140
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d795(%rip), %rsi     # 0xc752b
callq 0x65200
movq %rax, -0x278(%rbp)
jmp 0x69da4
movq -0x278(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x12800
leaq -0x160(%rbp), %rdi
callq 0x12460
cmpq $0x1, -0x70(%rbp)
jne 0x69f39
movb $0x0, -0x179(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x179(%rbp), %rsi
callq 0x741a0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d71a(%rip), %rsi     # 0xc7514
callq 0x65200
movq %rax, -0x288(%rbp)
jmp 0x69e08
movq -0x288(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x12800
leaq -0x178(%rbp), %rdi
callq 0x12460
jmp 0x69f39
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x69e9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x110(%rbp), %rdi
callq 0xbb98
leaq -0xf0(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x69ed1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x140(%rbp), %rdi
callq 0xbb98
leaq -0x120(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq -0x70(%rbp), %rax
movq %rax, -0x290(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4bb10
movq %rax, %rcx
movq -0x290(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x69fe0
movb $0x1, -0x191(%rbp)
leaq -0x190(%rbp), %rdi
leaq -0x191(%rbp), %rsi
callq 0x741a0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d589(%rip), %rsi     # 0xc751d
callq 0x65200
movq %rax, -0x298(%rbp)
jmp 0x69fa2
movq -0x298(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x12800
leaq -0x190(%rbp), %rdi
callq 0x12460
jmp 0x69fe0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x12460
jmp 0x6a1d4
movq -0x1f0(%rbp), %rsi
movq -0x10(%rbp), %rdi
addq $0x38, %rdi
callq 0x32be0
jmp 0x69ff6
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x12a40
jmp 0x6a010
jmp 0x69b81
movq -0x1f0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x2a0(%rbp)
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x1b8(%rbp), %rdi
callq 0xb230
jmp 0x6a03d
movq -0x2a0(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x126a0
movq %rax, -0x2a8(%rbp)
jmp 0x6a059
movq -0x2a8(%rbp), %rdi
callq 0x801d0
leaq -0x1b8(%rbp), %rdi
callq 0xbb98
movq -0x1f0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x2b0(%rbp)
movq -0x10(%rbp), %rsi
addq $0x88, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0xb230
jmp 0x6a09c
movq -0x2b0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x126a0
movq %rax, -0x2b8(%rbp)
jmp 0x6a0b8
movq -0x2b8(%rbp), %rdi
callq 0x801d0
leaq -0x1d8(%rbp), %rdi
callq 0xbb98
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d42b(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x2c0(%rbp)
jmp 0x6a0f0
movq -0x2c0(%rbp), %rdi
callq 0x742d0
testb $0x1, %al
jne 0x6a190
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5d3f7(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x2c8(%rbp)
jmp 0x6a124
movq -0x2c8(%rbp), %rsi
leaq -0x1e8(%rbp), %rdi
callq 0x4a8d0
movq -0x1f0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x12800
leaq -0x1e8(%rbp), %rdi
callq 0x12460
jmp 0x6a1c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0xbb98
jmp 0x6a1d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0xbb98
jmp 0x6a1d4
movq -0x1f0(%rbp), %rdi
addq $0x38, %rdi
leaq 0x5c184(%rip), %rsi     # 0xc6326
callq 0x65200
movq %rax, -0x2d0(%rbp)
jmp 0x6a1b0
movq -0x1f0(%rbp), %rax
movq -0x2d0(%rbp), %rcx
movq %rcx, 0x48(%rax)
leaq -0x20(%rbp), %rdi
callq 0x6c020
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
leaq -0x20(%rbp), %rdi
callq 0x6c020
movq -0x50(%rbp), %rdi
callq 0xba60
nopw %cs:(%rax,%rax)