aboutsummaryrefslogtreecommitdiff
path: root/doc/IMPLEMENTATION.md
blob: 387c6ebd552756002fb140fa744adafc224657c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Goal
1. In the first stage the parser parses multiple files at the same time using multiple threads.
The tokenization should be done without storing the tokens in a list (streaming) but AST needs to be stored in a list
because the compiler needs to support out of order declarations.
2. In the second stage the ast is handled using multiple threads. In this stage, variables, parameters
and types are defined and resolved and if a type is defined after there is a reference to it,
then the compiler first resolves that type. There are flags set to make sure there aren't recursive dependencies.
3. In the third stage the resolved ast is used to create SSA form (static single assignment form). If optimization is
enabled then then some inlining for ast is done by copying ast from functions to the places they are called from
before the SSA is created.
4. In the fourth stage the SSA form is used to create the bytecode. If optimization is enabled then the SSA form
is optimized before creating the bytecode.
5. If optimization is enabled then the bytecode is optimized.

# Progress
1. Parsing using multiple threads is done, but the parser is not finished.
2. Resolving ast using multiple threads is done, but the ast resolver is not finished.
3. Generating ssa using multiple threads is done, but the ssa generator is not finished.
4. Generating bytecode using multiple threads is done, but the bytecode generator is not finished.
Currently it generates C code.
5. Not started.