- Renamed "intrinsic" -> "primitive"
- I thought it was funny, but it's just annoying.
- Rename "Uninferred" -> "Inferred"
- It's a concrete type, but an inferred one.
- Add lifetimes to the Entry API
- Categorize does not care about recursive types. You can't have a recursive AST.
- Added helpful constructors to the inference engine
- Added some overloadable operators to the inference engine
- These are a MAJOR work in progress
- Reorganized the Inference implementation file by functionality.
stdlib:
- Updated standard library.
- Integrate the Match and Pattern nodes into the AST
- TODO: `let x: T` is ambiguous with `let x: {}`. Currently the latter takes precedence in the parser.
- Implement pattern matching through unification in the interpreter.
- It's not fast, but it works!
- Refactor destructuring assignments to use the new pattern functionality
I used tree interning here, because the interner already contains the necessary locks to make it Sync, and I was lazy. Be my guest if you want to do something else.
The computational overhead of interning the ASTs here is negligible, since this is all CLI code anyway.
- Removed all unreferenced files
- Reimplemented missing/nonfunctional behavior
- Added module documentation for most things
- TODO: item-level docs on Entry(Mut)
- Reparented the stages of Table population into the `stage` module.
- TODO: rewrite type inference to use only the tools provided by Table.
- Perform heirarchical resolution through "transparent" nodes
- Reparenting impls broke relative path traversal entirely. To impl something, it must already be in scope anyway.
- TODO: well-formedness checks?
- Holds a DefID and a reference to the Project
- Pretty-prints def signatures
- Use handles when printing types (WIP)
Known issues:
- Printing recursive types recurses forever
- There's some unrelated name resolution stuff going on that needs investigating.
TODO:
- Better name
- HandleMut?
- More interfaces!
- Migrate everything to use handles when oop semantics are easiest
- Reject plain recursive types, and don't recurse through reference types when printing