blob: e209b74a1221f577fe0d6f9a71b462aaadaad7db (
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
|
Intro
===
This project is an attempt at creating a simple rust compiler in C++, with the ultimate goal of being a seperate reimplementation.
The short-term goal is to compile pre-borrowchecked rust code into C, for passing to an existing C compiler. Thankfully, (from what I have seen), the borrow checker is not needed to compile rust code (just to ensure that it's valid)
Current Features
===
- Successfully parses libcore and rustc's run-pass tests
- (incomplte) Attribute and macro expansion
- Rewrite in progress, missing some syntax extensions
- Resolves all paths to absolute forms
- Outputs the processed AST as (almost) rust code
- Almost because it uses special path types to handle: external crates, 'str', and anonymous modules.
Short-Term Plans
===
- Complete rewrite/audit of resolve section to reduce chance of bugs.
- Type resolution and checking (quite interlinked)
- Converting operator invocations to explicit calls
Medium-Term Goals
===
- Flattening AST into an intermediate form with no module higherarchy or generics
- Converting flat AST into C
- Bonus points for making it readable C
- NOTE: Due to `#[cfg]` attributes being resolved already, the C code won't be portable.
|