931af90789
- implemented type parsing including custom types and generics (useless for now as we do no semantic analysis) - implemented struct literal parsing - implemented struct definition parsing (no generics yet) - implemented tuple parsing - registers are now allocated starting from zero - updated to-dos
1.4 KiB
1.4 KiB
General TODO's
Bugfixes
- [EASY] Investigate logical and operator not compiling - either a lexer or parser issue.
- note: this was a parser issue.
Missing features
- [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.
- type-safe instruction builder