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

    if (!current_loop_data->empty()) {
      auto tmp = *current_loop_data; // Because of clang-3
      (*current_loop_data)["parent"] = std::move(tmp);
    }

    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.value)] = *it;

      (*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.value)].clear();
    if (!(*current_loop_data)["parent"].empty()) {
      auto tmp = (*current_loop_data)["parent"];
      *current_loop_data = std::move(tmp);
    } else {
      current_loop_data = &json_additional_data["loop"];
    }
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x270, %rsp            # imm = 0x270
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0x1c0(%rbp)
movq -0x10(%rbp), %rdx
addq $0x10, %rdx
leaq -0x20(%rbp), %rdi
callq 0x7f660
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4a970
testb $0x1, %al
jne 0x6927c
leaq -0x41(%rbp), %rdi
movq %rdi, -0x1c8(%rbp)
callq 0xba70
movq -0x1c8(%rbp), %rdx
leaq 0x5e2df(%rip), %rsi     # 0xc74f5
leaq -0x40(%rbp), %rdi
callq 0x10b90
jmp 0x69221
movq -0x1c0(%rbp), %rdi
movq -0x10(%rbp), %rdx
leaq -0x40(%rbp), %rsi
callq 0x726f0
jmp 0x69237
leaq -0x40(%rbp), %rdi
callq 0xbb98
leaq -0x41(%rbp), %rdi
callq 0xb600
jmp 0x6927c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x6926e
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 0x69930
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
callq 0x742d0
testb $0x1, %al
jne 0x6932f
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rsi
leaq -0x68(%rbp), %rdi
callq 0x4bc70
jmp 0x692aa
leaq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x4a8d0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5e244(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x1d0(%rbp)
jmp 0x692d7
movq -0x1d0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x12800
leaq -0x78(%rbp), %rdi
callq 0x12460
leaq -0x68(%rbp), %rdi
callq 0x12460
jmp 0x6932f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x12460
leaq -0x68(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq $0x0, -0x80(%rbp)
movb $0x1, -0x91(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x91(%rbp), %rsi
callq 0x741a0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5e1b1(%rip), %rsi     # 0xc7514
callq 0x65200
movq %rax, -0x1d8(%rbp)
jmp 0x69371
movq -0x1d8(%rbp), %rdi
leaq -0x90(%rbp), %rsi
movq %rsi, -0x1e8(%rbp)
callq 0x12800
movq -0x1e8(%rbp), %rdi
callq 0x12460
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4bb10
subq $0x2, %rax
setb -0xa9(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0xa9(%rbp), %rsi
callq 0x741a0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5e145(%rip), %rsi     # 0xc751d
callq 0x65200
movq %rax, -0x1e0(%rbp)
jmp 0x693e6
movq -0x1e0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x12800
leaq -0xa8(%rbp), %rdi
callq 0x12460
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0x12870
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rsi
leaq -0xf0(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x128e0
movq -0x1f8(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x128b0
movb %al, -0x1e9(%rbp)
jmp 0x69457
movb -0x1e9(%rbp), %al
testb $0x1, %al
jne 0x69466
jmp 0x697c9
leaq -0xd0(%rbp), %rdi
callq 0x7d390
movq %rax, -0x200(%rbp)
jmp 0x6947b
movq -0x200(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x4bc70
jmp 0x69490
movq -0x1c0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x208(%rbp)
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x120(%rbp), %rdi
callq 0xb230
jmp 0x694b8
movq -0x208(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x126a0
movq %rax, -0x210(%rbp)
jmp 0x694d4
movq -0x210(%rbp), %rdi
leaq -0x100(%rbp), %rsi
movq %rsi, -0x220(%rbp)
callq 0x12800
leaq -0x120(%rbp), %rdi
callq 0xbb98
movq -0x220(%rbp), %rdi
callq 0x12460
leaq -0x130(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x54200
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5dffd(%rip), %rsi     # 0xc7525
callq 0x65200
movq %rax, -0x218(%rbp)
jmp 0x69536
movq -0x218(%rbp), %rdi
leaq -0x130(%rbp), %rsi
movq %rsi, -0x230(%rbp)
callq 0x12800
movq -0x230(%rbp), %rdi
callq 0x12460
movq -0x80(%rbp), %rax
incq %rax
movq %rax, -0x148(%rbp)
leaq -0x140(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x79140
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5df9c(%rip), %rsi     # 0xc752b
callq 0x65200
movq %rax, -0x228(%rbp)
jmp 0x6959d
movq -0x228(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x12800
leaq -0x140(%rbp), %rdi
callq 0x12460
cmpq $0x1, -0x80(%rbp)
jne 0x696ed
movb $0x0, -0x159(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x159(%rbp), %rsi
callq 0x741a0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5df21(%rip), %rsi     # 0xc7514
callq 0x65200
movq %rax, -0x238(%rbp)
jmp 0x69601
movq -0x238(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x12800
leaq -0x158(%rbp), %rdi
callq 0x12460
jmp 0x696ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x69685
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x120(%rbp), %rdi
callq 0xbb98
leaq -0x100(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq -0x80(%rbp), %rax
movq %rax, -0x240(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x73b20
movq %rax, %rdi
callq 0x4bb10
movq %rax, %rcx
movq -0x240(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x69794
movb $0x1, -0x171(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x171(%rbp), %rsi
callq 0x741a0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5ddd5(%rip), %rsi     # 0xc751d
callq 0x65200
movq %rax, -0x248(%rbp)
jmp 0x69756
movq -0x248(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x12800
leaq -0x170(%rbp), %rdi
callq 0x12460
jmp 0x69794
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x12460
jmp 0x69930
movq -0x1c0(%rbp), %rsi
movq -0x10(%rbp), %rdi
addq $0x38, %rdi
callq 0x32be0
jmp 0x697aa
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x12a40
jmp 0x697c4
jmp 0x6941d
movq -0x1c0(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x250(%rbp)
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x198(%rbp), %rdi
callq 0xb230
jmp 0x697f1
movq -0x250(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x126a0
movq %rax, -0x258(%rbp)
jmp 0x6980d
movq -0x258(%rbp), %rdi
callq 0x801d0
leaq -0x198(%rbp), %rdi
callq 0xbb98
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5dcd6(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x260(%rbp)
jmp 0x69845
movq -0x260(%rbp), %rdi
callq 0x742d0
testb $0x1, %al
jne 0x698ec
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0x5dca2(%rip), %rsi     # 0xc750d
callq 0x65200
movq %rax, -0x268(%rbp)
jmp 0x69879
movq -0x268(%rbp), %rsi
leaq -0x1a8(%rbp), %rdi
callq 0x4bc70
jmp 0x6988e
leaq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x4a8d0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x12800
leaq -0x1b8(%rbp), %rdi
callq 0x12460
leaq -0x1a8(%rbp), %rdi
callq 0x12460
jmp 0x6991e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x198(%rbp), %rdi
callq 0xbb98
jmp 0x69930
movq -0x1c0(%rbp), %rdi
addq $0x38, %rdi
leaq 0x5ca28(%rip), %rsi     # 0xc6326
callq 0x65200
movq %rax, -0x270(%rbp)
jmp 0x6990c
movq -0x1c0(%rbp), %rax
movq -0x270(%rbp), %rcx
movq %rcx, 0x48(%rax)
leaq -0x20(%rbp), %rdi
callq 0x6c020
addq $0x270, %rsp            # imm = 0x270
popq %rbp
retq
leaq -0x20(%rbp), %rdi
callq 0x6c020
movq -0x50(%rbp), %rdi
callq 0xba60
nopw %cs:(%rax,%rax)
nopl (%rax)