# General TODO's

# Bugfixes
- [x] [EASY] Investigate logical and operator not compiling - either a lexer or parser issue.
  - **note**: this was a parser issue.

# Missing features
- [x] [MEDIUM] Get shift operations working correctly.
- [ ] [MEDIUM] proper prefix/postfix inc/dec implementation. slightly more complex as we need to check for a variable and modify it in place
- [ ] [EASY] Add multiply and divide operations to code generation
  - **note**: very easy to do but our division algorithm is hopelessly slow so not worth doing for now.

# Performance Improvements
- [ ] [MEDIUM] implement a proper div/mod library that's not slow af.
- [ ] [HARD] Immediate operations for values that support it (up to +/- u16::max for addi and subi respectively) 
  - this requires significant complexity in code generation as we need to traverse down the tree when we come across these operations to prevent additional register allocations.

# Compiler optimisations

# Codegen improvements
- [ ] [MEDIUM / time consuming] Add scoping to code generation
- [ ] [MEDIUM / time consuming] Rewrite entire codegen to imrpove code quality and make the code more readable.
  - [ ] type-safe instruction builder
    - [ ] Instruction & Register enums
    - [ ] Instruction builder helper fns eg `fn add(left: &Register, right: &Register, dest: &Register) -> Instruction`
    - [ ] Instruction Block types.
