blob: 8146bfd6b7589f096fa6ef4ce4e1439e1d70155b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
TODO:
- Get all run-pass and run-fail tests passing resolve
- Lots of fixes to do here
- Audit TODOs in codebase
- MIR Optimisations
- Dead code eliminiation
- Remove variables that are just assigned from arguments
- Convert enum variants to point to structs for the data type
- Four types of variants: Unit, Value, Tuple1, Composite
- TODO: Have value enums be a different structure to data enums
- Tuple1 is a special case to reduce the cost of Some/Ok/Err/...
- This may have to wait for a rustc RFC? (or can hide the structs for now)
- Clean up Span code to correctly handle nested spans
- Clean up AST
- Almost done, just a few little niggles left
- Split arg patterns and arg types up for cleaner serialisation
- Could be a good idea to do as part of changing HIR::TraitImpl to only contain the impl data
- May not be too useful due to argument monomorphisation.
- Optimise typecheck.
- MIR: Unify Variable/Argument/Temporary LValue types
- This should reduce the amount of code needed for validation, but will be a
BIG change.
## Optimisations
- Argument propagation: replace assignments from Argument(_) if target is only
written once
- Dead assignment removal (Delete `<val> = Use(<val>)`
- Tuple destructure removal
- Spot `#1 = (...,)`, `#2 = (#1).n` where #1 is Write-once, borrow-none
|