// File: protonpopsicle[P]lang/src/compiler/Lexer.cpp
// Function: Lexer::Lexer(_IO_FILE*)
Lexer::Lexer(FILE *f) {
    fp = f;
    peek = ' '; 
    line = 1;
    
    keywords.insert(std::make_pair("int", BASIC));
    keywords.insert(std::make_pair("string", BASIC));
    keywords.insert(std::make_pair("bool", BASIC));
    keywords.insert(std::make_pair("true", TRUE));
    keywords.insert(std::make_pair("false", FALSE));
    keywords.insert(std::make_pair("print", PRINT));
    keywords.insert(std::make_pair("if", IF));
    keywords.insert(std::make_pair("while", WHILE));
    keywords.insert(std::make_pair("do", DO));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x390, %rsp            # imm = 0x390
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x230(%rbp)
movq %rdi, %rax
movq %rax, -0x240(%rbp)
movq %rdi, %rax
movq %rax, -0x238(%rbp)
callq 0x7cc0
movq -0x230(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, 0x30(%rax)
movb $0x20, 0x38(%rax)
movl $0x1, 0x3c(%rax)
movl $0x103, -0x24(%rbp)     # imm = 0x103
leaq 0x72c9(%rip), %rdi      # 0xe1e8
leaq -0x24(%rbp), %rsi
callq 0x7d20
movl %edx, -0x224(%rbp)
movq %rax, -0x220(%rbp)
jmp 0x6f37
movq -0x230(%rbp), %rdi
movl -0x224(%rbp), %eax
movq -0x220(%rbp), %rcx
movq %rcx, -0x48(%rbp)
movl %eax, -0x40(%rbp)
movl -0x40(%rbp), %eax
movl %eax, -0x18(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x20(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x249(%rbp)
movq %rax, -0x248(%rbp)
jmp 0x6f78
movq -0x240(%rbp), %rax
movb -0x249(%rbp), %cl
movq -0x248(%rbp), %rdx
movq %rdx, -0x58(%rbp)
movb %cl, -0x50(%rbp)
movq %rax, -0x268(%rbp)
movl $0x103, -0x6c(%rbp)     # imm = 0x103
leaq 0x7227(%rip), %rdi      # 0xe1cf
leaq -0x6c(%rbp), %rsi
callq 0x7d60
movl %edx, -0x25c(%rbp)
movq %rax, -0x258(%rbp)
jmp 0x6fc0
movq -0x268(%rbp), %rdi
movl -0x25c(%rbp), %eax
movq -0x258(%rbp), %rcx
movq %rcx, -0x80(%rbp)
movl %eax, -0x78(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x60(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x271(%rbp)
movq %rax, -0x270(%rbp)
jmp 0x7001
movq -0x240(%rbp), %rax
movb -0x271(%rbp), %cl
movq -0x270(%rbp), %rdx
movq %rdx, -0x90(%rbp)
movb %cl, -0x88(%rbp)
movq %rax, -0x290(%rbp)
movl $0x103, -0xa4(%rbp)     # imm = 0x103
leaq 0x719c(%rip), %rdi      # 0xe1d6
leaq -0xa4(%rbp), %rsi
callq 0x7da0
movl %edx, -0x284(%rbp)
movq %rax, -0x280(%rbp)
jmp 0x7055
movq -0x290(%rbp), %rdi
movl -0x284(%rbp), %eax
movq -0x280(%rbp), %rcx
movq %rcx, -0xb8(%rbp)
movl %eax, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
movl %eax, -0x98(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x299(%rbp)
movq %rax, -0x298(%rbp)
jmp 0x70ab
movq -0x240(%rbp), %rax
movb -0x299(%rbp), %cl
movq -0x298(%rbp), %rdx
movq %rdx, -0xc8(%rbp)
movb %cl, -0xc0(%rbp)
movq %rax, -0x2b8(%rbp)
movl $0x104, -0xdc(%rbp)     # imm = 0x104
leaq 0x70f7(%rip), %rdi      # 0xe1db
leaq -0xdc(%rbp), %rsi
callq 0x7da0
movl %edx, -0x2ac(%rbp)
movq %rax, -0x2a8(%rbp)
jmp 0x70ff
movq -0x2b8(%rbp), %rdi
movl -0x2ac(%rbp), %eax
movq -0x2a8(%rbp), %rcx
movq %rcx, -0xf0(%rbp)
movl %eax, -0xe8(%rbp)
movl -0xe8(%rbp), %eax
movl %eax, -0xd0(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xd8(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x2c1(%rbp)
movq %rax, -0x2c0(%rbp)
jmp 0x7155
movq -0x240(%rbp), %rax
movb -0x2c1(%rbp), %cl
movq -0x2c0(%rbp), %rdx
movq %rdx, -0x100(%rbp)
movb %cl, -0xf8(%rbp)
movq %rax, -0x2e0(%rbp)
movl $0x105, -0x114(%rbp)    # imm = 0x105
leaq 0x7052(%rip), %rdi      # 0xe1e0
leaq -0x114(%rbp), %rsi
callq 0x7de0
movl %edx, -0x2d4(%rbp)
movq %rax, -0x2d0(%rbp)
jmp 0x71a9
movq -0x2e0(%rbp), %rdi
movl -0x2d4(%rbp), %eax
movq -0x2d0(%rbp), %rcx
movq %rcx, -0x128(%rbp)
movl %eax, -0x120(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x108(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x110(%rbp)
leaq -0x110(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x2e9(%rbp)
movq %rax, -0x2e8(%rbp)
jmp 0x71ff
movq -0x240(%rbp), %rax
movb -0x2e9(%rbp), %cl
movq -0x2e8(%rbp), %rdx
movq %rdx, -0x138(%rbp)
movb %cl, -0x130(%rbp)
movq %rax, -0x308(%rbp)
movl $0x106, -0x14c(%rbp)    # imm = 0x106
leaq 0x6fae(%rip), %rdi      # 0xe1e6
leaq -0x14c(%rbp), %rsi
callq 0x7de0
movl %edx, -0x2fc(%rbp)
movq %rax, -0x2f8(%rbp)
jmp 0x7253
movq -0x308(%rbp), %rdi
movl -0x2fc(%rbp), %eax
movq -0x2f8(%rbp), %rcx
movq %rcx, -0x160(%rbp)
movl %eax, -0x158(%rbp)
movl -0x158(%rbp), %eax
movl %eax, -0x140(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x148(%rbp)
leaq -0x148(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x311(%rbp)
movq %rax, -0x310(%rbp)
jmp 0x72a9
movq -0x240(%rbp), %rax
movb -0x311(%rbp), %cl
movq -0x310(%rbp), %rdx
movq %rdx, -0x170(%rbp)
movb %cl, -0x168(%rbp)
movq %rax, -0x330(%rbp)
movl $0x107, -0x184(%rbp)    # imm = 0x107
leaq 0x6f0a(%rip), %rdi      # 0xe1ec
leaq -0x184(%rbp), %rsi
callq 0x7e20
movl %edx, -0x324(%rbp)
movq %rax, -0x320(%rbp)
jmp 0x72fd
movq -0x330(%rbp), %rdi
movl -0x324(%rbp), %eax
movq -0x320(%rbp), %rcx
movq %rcx, -0x198(%rbp)
movl %eax, -0x190(%rbp)
movl -0x190(%rbp), %eax
movl %eax, -0x178(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0x180(%rbp)
leaq -0x180(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x339(%rbp)
movq %rax, -0x338(%rbp)
jmp 0x7353
movq -0x240(%rbp), %rax
movb -0x339(%rbp), %cl
movq -0x338(%rbp), %rdx
movq %rdx, -0x1a8(%rbp)
movb %cl, -0x1a0(%rbp)
movq %rax, -0x358(%rbp)
movl $0x108, -0x1bc(%rbp)    # imm = 0x108
leaq 0x6e63(%rip), %rdi      # 0xe1ef
leaq -0x1bc(%rbp), %rsi
callq 0x7de0
movl %edx, -0x34c(%rbp)
movq %rax, -0x348(%rbp)
jmp 0x73a7
movq -0x358(%rbp), %rdi
movl -0x34c(%rbp), %eax
movq -0x348(%rbp), %rcx
movq %rcx, -0x1d0(%rbp)
movl %eax, -0x1c8(%rbp)
movl -0x1c8(%rbp), %eax
movl %eax, -0x1b0(%rbp)
movq -0x1d0(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x1b8(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x361(%rbp)
movq %rax, -0x360(%rbp)
jmp 0x73fd
movq -0x240(%rbp), %rax
movb -0x361(%rbp), %cl
movq -0x360(%rbp), %rdx
movq %rdx, -0x1e0(%rbp)
movb %cl, -0x1d8(%rbp)
movq %rax, -0x380(%rbp)
movl $0x109, -0x1f4(%rbp)    # imm = 0x109
leaq 0x6dbf(%rip), %rdi      # 0xe1f5
leaq -0x1f4(%rbp), %rsi
callq 0x7e20
movl %edx, -0x374(%rbp)
movq %rax, -0x370(%rbp)
jmp 0x7451
movq -0x380(%rbp), %rdi
movl -0x374(%rbp), %eax
movq -0x370(%rbp), %rcx
movq %rcx, -0x208(%rbp)
movl %eax, -0x200(%rbp)
movl -0x200(%rbp), %eax
movl %eax, -0x1e8(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x1f0(%rbp)
leaq -0x1f0(%rbp), %rsi
callq 0x7ce0
movb %dl, -0x389(%rbp)
movq %rax, -0x388(%rbp)
jmp 0x74a7
movb -0x389(%rbp), %al
movq -0x388(%rbp), %rcx
movq %rcx, -0x218(%rbp)
movb %al, -0x210(%rbp)
addq $0x390, %rsp            # imm = 0x390
popq %rbp
retq
movq -0x238(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
callq 0x7e60
movq -0x30(%rbp), %rdi
callq 0x2390
nopl (%rax,%rax)