Skip to content

Latest commit

 

History

History
67 lines (65 loc) · 2.46 KB

File metadata and controls

67 lines (65 loc) · 2.46 KB

TODO

  • [-] Fix ident parsing - parse to whitespace and then check for validity. Currently, an invalid ident will cause a cryptic "expected EOS" error.

  • [-] Handle/allow UPPERCASE_IDENTs.

  • [+] Add Always singleton to enable pattern matching.

  • Consider allowing Map entries to be accessed using dot notation. This would allow Maps to be used as lightweight "instances", similar to JS.

  • Add docstrings

    • Functions
    • Other objects?
  • [-] Implement error handling (partially implemented)

  • [-] Replace unrecoverable errors with recoverable errors where appropriate

  • Implement basic types (Float, Int, Str, etc)

  • Implement format strings (AKA $ strings)

  • Implement Tuple

  • Implement List

  • Implement Map

  • Implement Set

  • Implement vars

  • Implement dot operator (attribute & item access)

  • Implement block

  • Implement inline blocks (block -> <expr>)

  • Implement labels

    • Fix label: <expr> syntax (this used to work but was broken recently)
  • Implement jump (jump forward to label)

    • Allow multiple jumps to the same label in a given scope
  • Implement conditionals (can be used as ternary too)

  • Implement match

  • Implement range

  • Implement loop

    • Implement while loops
    • Implement for loops
    • Fix break (works for simple cases but is wonky)
    • Implement continue
  • Implement function calls

    • Verify implementation
    • Implement return
  • Implement closures

    • Verify implementation
  • Implement native functions

    • Implement print function (print is currently implemented as a statement and has limited functionality)
  • Implement this binding for functions

  • Check tuple items / args and throw error when invalid items are included (e.g., break isn't allowed)

  • Implement modules

    • Add Module type
    • Implement module loading
  • Implement import

    • import <name>
      • There's a basic version of this that works for builtin modules
    • import from <name>: <names>
  • Implement custom classes

  • Figure out a nice way to do multi-line lambdas

  • [-] Improve error handling/reporting (of unrecoverable errors)

    • Make source location available in AST (started)
    • Fix locations in format strings
    • Make source locations available in VM
  • Add a lot more tests

  • [-] Profile

  • Benchmark