// File: taurheim[P]AgNES/./util/symbolTableUtil.h
// Function: printEntry(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, STEntry*)
static void printEntry(std::string indent, bool last, STEntry * entry) {
    std::string nodeString = stEntryTypeToString[entry->entryType];

    std::cout << indent;

    if (last) {
        std::cout << "\\-";
        indent.append(" ");
    } else {
        std::cout << "|-";
        indent.append("| ");
    }

    std::cout << nodeString << ":" << entry->scopeId << " " << entry->name;

    // Print all variables at this scope
    STEntry * currentEntry = entry->next;

    while(currentEntry != nullptr) {
        std::cout << " --> (" << stEntryTypeToString[currentEntry->entryType];

        if (currentEntry->typeDescriptor != nullptr) {
            STTypeDescriptor * td = currentEntry->typeDescriptor;
            
            std::cout << ":" << varTypeToString[td->type];
        }
        
        std::cout << " " << currentEntry->name << ")";
        currentEntry = currentEntry->next;
    }

    std::cout << std::endl;

    // Go through all children scopes
    for(auto it = entry->childScopes.begin(); it != entry->childScopes.end(); ++it ){
        bool isLast = std::next(it) == entry->childScopes.end();
        printEntry(indent, isLast, *it);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0xb0(%rbp)
movb %sil, %al
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x18(%rbp), %rsi
leaq 0x1c8eb(%rip), %rdi     # 0x35538
callq 0x196e0
movq %rax, %rsi
leaq -0x38(%rbp), %rdi
callq 0x3140
movq -0xb0(%rbp), %rsi
movq 0x1c35c(%rip), %rdi     # 0x34fc8
callq 0x32a0
jmp 0x18c73
testb $0x1, -0x9(%rbp)
je 0x18cb6
movq 0x1c348(%rip), %rdi     # 0x34fc8
leaq 0xb944(%rip), %rsi      # 0x245cb
callq 0x32e0
jmp 0x18c8e
movq -0xb0(%rbp), %rdi
leaq 0xbc8a(%rip), %rsi      # 0x24926
callq 0x3590
jmp 0x18ca3
jmp 0x18ce2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18fae
movq 0x1c30b(%rip), %rdi     # 0x34fc8
leaq 0xb90a(%rip), %rsi      # 0x245ce
callq 0x32e0
jmp 0x18ccb
movq -0xb0(%rbp), %rdi
leaq 0xb8f8(%rip), %rsi      # 0x245d1
callq 0x3590
jmp 0x18ce0
jmp 0x18ce2
movq 0x1c2df(%rip), %rdi     # 0x34fc8
leaq -0x38(%rbp), %rsi
callq 0x32a0
movq %rax, -0xb8(%rbp)
jmp 0x18cfb
movq -0xb8(%rbp), %rdi
leaq 0xbc86(%rip), %rsi      # 0x2498f
callq 0x32e0
movq %rax, -0xc0(%rbp)
jmp 0x18d17
movq -0xc0(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x4(%rax), %esi
callq 0x3500
movq %rax, -0xc8(%rbp)
jmp 0x18d33
movq -0xc8(%rbp), %rdi
leaq 0xbbe5(%rip), %rsi      # 0x24926
callq 0x32e0
movq %rax, -0xd0(%rbp)
jmp 0x18d4f
movq -0xd0(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq $0x38, %rsi
callq 0x32a0
jmp 0x18d65
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x18e88
movq 0x1c245(%rip), %rdi     # 0x34fc8
leaq 0xb9b1(%rip), %rsi      # 0x2473b
callq 0x32e0
movq %rax, -0xd8(%rbp)
jmp 0x18d98
movq -0x50(%rbp), %rsi
leaq 0x1c795(%rip), %rdi     # 0x35538
callq 0x196e0
movq %rax, -0xe0(%rbp)
jmp 0x18db1
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdi
callq 0x32a0
jmp 0x18dc6
movq -0x50(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x18e29
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
movq 0x1c1e4(%rip), %rdi     # 0x34fc8
leaq 0xbba4(%rip), %rsi      # 0x2498f
callq 0x32e0
movq %rax, -0xe8(%rbp)
jmp 0x18df9
movq -0x58(%rbp), %rsi
leaq 0x1c704(%rip), %rdi     # 0x35508
callq 0x197c0
movq %rax, -0xf0(%rbp)
jmp 0x18e12
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdi
callq 0x32a0
jmp 0x18e27
jmp 0x18e29
movq 0x1c198(%rip), %rdi     # 0x34fc8
leaq 0xbaef(%rip), %rsi      # 0x24926
callq 0x32e0
movq %rax, -0xf8(%rbp)
jmp 0x18e45
movq -0xf8(%rbp), %rdi
movq -0x50(%rbp), %rsi
addq $0x38, %rsi
callq 0x32a0
movq %rax, -0x100(%rbp)
jmp 0x18e62
movq -0x100(%rbp), %rdi
leaq 0xb496(%rip), %rsi      # 0x24306
callq 0x32e0
jmp 0x18e77
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x18d71
movq 0x1c139(%rip), %rdi     # 0x34fc8
movq 0x1c122(%rip), %rsi     # 0x34fb8
callq 0x3330
jmp 0x18e9d
movq -0x18(%rbp), %rdi
addq $0x20, %rdi
callq 0x198a0
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rdi
addq $0x20, %rdi
callq 0x19900
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x198d0
testb $0x1, %al
jne 0x18ed5
jmp 0x18f9c
movq -0x60(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rdi
movl $0x1, %esi
callq 0x19960
movq %rax, -0x108(%rbp)
jmp 0x18ef4
movq -0x108(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x18(%rbp), %rdi
addq $0x20, %rdi
callq 0x19900
movq %rax, -0x88(%rbp)
leaq -0x78(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x19930
movq -0xb0(%rbp), %rsi
movb %al, -0x69(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x3140
jmp 0x18f3b
movzbl -0x69(%rbp), %eax
movl %eax, -0x10c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x19990
movl -0x10c(%rbp), %esi
movq (%rax), %rdx
andl $0x1, %esi
leaq -0xa8(%rbp), %rdi
callq 0x18c20
jmp 0x18f68
leaq -0xa8(%rbp), %rdi
callq 0x31d0
leaq -0x60(%rbp), %rdi
callq 0x199c0
jmp 0x18eae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x31d0
jmp 0x18fae
leaq -0x38(%rbp), %rdi
callq 0x31d0
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0x31d0
movq -0x40(%rbp), %rdi
callq 0x3520