To-do

  • Lexical analysis
    • Rewrite to be more functional and less ugly
    • Comprehensive unit tests
    • Token position
  • Parser (Pratt parsing)
    • Remove asserts in favour of an actual error type
    • Pretty print the error type
    • Integration tests
      • Pratt parsing for expressions
      • If-else
      • If-elif-else
      • For
      • While
      • Symbol declarations
      • Errors
    • Convert errors to SemError-style internal ::new calls
  • Abstract syntax tree
    • Remove asserts for an actual error type
    • Printing utility
    • Replace usages of Box<AstNode> where appropriate
      • Replace BlockNode in the AST + explicit scope entering in semantic analysis
    • Visitor trait
  • Semantic analysis
    • Function table construction
    • Error type
    • Type checking
    • Integration tests
  • Intermediate representation
    • Printing utility
  • Optimisations
  • Assembly generation
  • CI/CD pipeline (snapshot testing)
    • Move tests into separate tests folder
    • Fix release-mode compilation errors so GitHub Actions can actually run
    • CD releases
  • Language features
    • Pointer types
    • Struct types