// File: TsukiGva2[P]Blade-lang/blade.cpp
// Function: main
int main (int argc, char** argv) {
// first, i created a map
// what the map does is simple,
// so it maps a std::string, i.e "double quoted text"
// to a function pointer(FnPtr).
	std::string input = "a";
	funcs_map = {
				{"+", 		add},
				{"-",  		sub},
				{"*",  		mul},
				{"/",  		div},
				{"_xfun",   execfun},
				{"makefun", makefun},
				{"_bit",    bit_},
				{"let",     let_},
				{"bits",    let_},
				{"id",      id_},
				{"cmp", 	cmp_},
				{"@", 		_at},
				{"appendto",_at},
                {"if", 		_if},
                {"split", 	split_},
                {"id_2", id_2}};
	std::string res = "";
	while (input != "exit") {
		input = read_a_line("blade -|>>> ");
		res = lc_eval(input);
		std::cout << "retrieved: " << res << endl;
	}
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4a0, %rsp            # imm = 0x4A0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0x505b0
movq -0x418(%rbp), %rdx
leaq 0xe75d1(%rip), %rsi     # 0x102268
leaq -0x30(%rbp), %rdi
callq 0x1b480
jmp 0x1aca2
leaq -0x31(%rbp), %rdi
callq 0x505d0
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x1a00(%rip), %rax     # 0x192c0
movq %rax, -0x2e8(%rbp)
leaq 0xe76a6(%rip), %rsi     # 0x102374
leaq -0x2e8(%rbp), %rdx
callq 0x1cec0
jmp 0x1acdc
leaq -0x2b0(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x1921(%rip), %rax     # 0x193d0
movq %rax, -0x2f0(%rbp)
leaq 0xe763e(%rip), %rsi     # 0x10233d
leaq -0x2f0(%rbp), %rdx
callq 0x1cec0
jmp 0x1ad0d
leaq -0x288(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x1722(%rip), %rax     # 0x19600
movq %rax, -0x2f8(%rbp)
leaq 0xe75aa(%rip), %rsi     # 0x1022da
leaq -0x2f8(%rbp), %rdx
callq 0x1cec0
jmp 0x1ad3e
leaq -0x260(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x1633(%rip), %rax     # 0x19720
movq %rax, -0x300(%rbp)
leaq 0xe25d4(%rip), %rsi     # 0xfd335
leaq -0x300(%rbp), %rdx
callq 0x1cec0
jmp 0x1ad6f
leaq -0x238(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x1364(%rip), %rax     # 0x19a20
movq %rax, -0x308(%rbp)
leaq 0xe25a5(%rip), %rsi     # 0xfd337
leaq -0x308(%rbp), %rdx
callq 0x1cf40
jmp 0x1ada0
leaq -0x210(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xfb5(%rip), %rax      # 0x19e00
movq %rax, -0x310(%rbp)
leaq 0xe257a(%rip), %rsi     # 0xfd33d
leaq -0x310(%rbp), %rdx
callq 0x1cfc0
jmp 0x1add1
leaq -0x1e8(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xdf6(%rip), %rax      # 0x19ff0
movq %rax, -0x318(%rbp)
leaq 0xe2499(%rip), %rsi     # 0xfd28d
leaq -0x318(%rbp), %rdx
callq 0x1d040
jmp 0x1ae02
leaq -0x1c0(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xcc7(%rip), %rax      # 0x1a150
movq %rax, -0x320(%rbp)
leaq 0xe24b6(%rip), %rsi     # 0xfd2db
leaq -0x320(%rbp), %rdx
callq 0x1d0c0
jmp 0x1ae33
leaq -0x198(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xcf8(%rip), %rax      # 0x1a150
movq %rax, -0x328(%rbp)
leaq 0xe24ef(%rip), %rsi     # 0xfd345
leaq -0x328(%rbp), %rdx
callq 0x1d040
jmp 0x1ae64
leaq -0x170(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xc39(%rip), %rax      # 0x1a240
movq %rax, -0x330(%rbp)
leaq 0xe68ca(%rip), %rsi     # 0x101751
leaq -0x330(%rbp), %rdx
callq 0x1d140
jmp 0x1ae95
leaq -0x148(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xbba(%rip), %rax      # 0x1a2f0
movq %rax, -0x338(%rbp)
leaq 0xe2492(%rip), %rsi     # 0xfd34a
leaq -0x338(%rbp), %rdx
callq 0x1d0c0
jmp 0x1aec6
leaq -0x120(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x8eb(%rip), %rax      # 0x1a5f0
movq %rax, -0x340(%rbp)
leaq 0xe2465(%rip), %rsi     # 0xfd34e
leaq -0x340(%rbp), %rdx
callq 0x1cec0
jmp 0x1aef7
leaq -0xf8(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x91c(%rip), %rax      # 0x1a5f0
movq %rax, -0x348(%rbp)
leaq 0xe2436(%rip), %rsi     # 0xfd350
leaq -0x348(%rbp), %rdx
callq 0x1d1c0
jmp 0x1af28
leaq -0xd0(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xb7d(%rip), %rax      # 0x1a3c0
movq %rax, -0x350(%rbp)
leaq 0xe23c8(%rip), %rsi     # 0xfd313
leaq -0x350(%rbp), %rdx
callq 0x1d140
jmp 0x1af59
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0x74e(%rip), %rax      # 0x1a820
movq %rax, -0x358(%rbp)
leaq 0xe23dd(%rip), %rsi     # 0xfd359
leaq -0x358(%rbp), %rdx
callq 0x1cf40
jmp 0x1af8a
leaq -0x80(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
leaq -0xd0c(%rip), %rax      # 0x1a290
movq %rax, -0x360(%rbp)
leaq 0xe23b5(%rip), %rsi     # 0xfd35f
leaq -0x360(%rbp), %rdx
callq 0x1d040
jmp 0x1afb8
leaq -0x2d8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x10, -0x50(%rbp)
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
leaq 0x13a916(%rip), %rdi    # 0x1558f0
callq 0x1d260
jmp 0x1afe1
leaq -0x2d8(%rbp), %rax
movq %rax, -0x428(%rbp)
addq $0x280, %rax            # imm = 0x280
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x430(%rbp)
callq 0x1d240
movq -0x428(%rbp), %rcx
movq -0x430(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x420(%rbp)
jne 0x1affc
leaq -0x381(%rbp), %rdi
movq %rdi, -0x438(%rbp)
callq 0x505b0
movq -0x438(%rbp), %rdx
leaq 0xe23b6(%rip), %rsi     # 0xfd404
leaq -0x380(%rbp), %rdi
callq 0x1b480
jmp 0x1b05c
leaq -0x381(%rbp), %rdi
callq 0x505d0
leaq 0xe22f5(%rip), %rsi     # 0xfd364
leaq -0x30(%rbp), %rdi
callq 0x1d2b0
movb %al, -0x439(%rbp)
jmp 0x1b080
movb -0x439(%rbp), %al
testb $0x1, %al
jne 0x1b08f
jmp 0x1b30f
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x505b0
movq -0x448(%rbp), %rdx
leaq 0xe22b9(%rip), %rsi     # 0xfd369
leaq -0x3c8(%rbp), %rdi
callq 0x1b480
jmp 0x1b0be
leaq -0x3a8(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0x183b0
jmp 0x1b0d3
leaq -0x30(%rbp), %rdi
movq %rdi, -0x450(%rbp)
leaq -0x3a8(%rbp), %rsi
movq %rsi, -0x458(%rbp)
callq 0xcac20
movq -0x458(%rbp), %rdi
callq 0xcabd0
leaq -0x3c8(%rbp), %rdi
callq 0xcabd0
leaq -0x3c9(%rbp), %rdi
callq 0x505d0
movq -0x450(%rbp), %rsi
leaq -0x410(%rbp), %rdi
callq 0xcd060
jmp 0x1b12a
leaq -0x3f0(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x18680
jmp 0x1b13f
leaq -0x380(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
movq %rsi, -0x468(%rbp)
callq 0xcac20
movq -0x468(%rbp), %rdi
callq 0xcabd0
leaq -0x410(%rbp), %rdi
callq 0xcabd0
leaq 0x13b7e8(%rip), %rdi    # 0x156960
leaq 0xe21f7(%rip), %rsi     # 0xfd376
callq 0xba870
movq %rax, -0x460(%rbp)
jmp 0x1b18d
movq -0x460(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0xcd2e0
movq %rax, -0x470(%rbp)
jmp 0x1b1a9
movq -0x470(%rbp), %rdi
leaq 0x9ef99(%rip), %rsi     # 0xba150
callq 0xb9360
jmp 0x1b1be
jmp 0x1b068
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x505d0
jmp 0x1b34c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movq -0x2e0(%rbp), %rax
leaq -0x2d8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x478(%rbp)
je 0x1b234
movq -0x478(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x480(%rbp)
callq 0x1d240
movq -0x480(%rbp), %rax
leaq -0x2d8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x478(%rbp)
jne 0x1b203
jmp 0x1b343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2d8(%rbp), %rax
movq %rax, -0x490(%rbp)
addq $0x280, %rax            # imm = 0x280
movq %rax, -0x488(%rbp)
movq -0x488(%rbp), %rdi
addq $-0x28, %rdi
movq %rdi, -0x498(%rbp)
callq 0x1d240
movq -0x490(%rbp), %rcx
movq -0x498(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x488(%rbp)
jne 0x1b260
jmp 0x1b343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x381(%rbp), %rdi
callq 0x505d0
jmp 0x1b343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1b337
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1b2e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0xcabd0
leaq -0x3c9(%rbp), %rdi
callq 0x505d0
jmp 0x1b337
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x410(%rbp), %rdi
callq 0xcabd0
jmp 0x1b337
movl $0x0, -0x4(%rbp)
leaq -0x380(%rbp), %rdi
callq 0xcabd0
leaq -0x30(%rbp), %rdi
callq 0xcabd0
movl -0x4(%rbp), %eax
addq $0x4a0, %rsp            # imm = 0x4A0
popq %rbp
retq
leaq -0x380(%rbp), %rdi
callq 0xcabd0
leaq -0x30(%rbp), %rdi
callq 0xcabd0
movq -0x40(%rbp), %rdi
callq 0xfa2a0
nopw %cs:(%rax,%rax)
nop