aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.h
Commit message (Collapse)AuthorAgeFilesLines
* Fix local variables on recursive callsBad Diode2021-11-171-8/+26
|
* Add tail call optimization for function callsBad Diode2021-11-161-30/+52
|
* Move ret pointer before closed vars in proc callsBad Diode2021-11-161-6/+14
| | | | | | | | | | | | | | | The previous call convention we had the following before the function call: [ PROC_ADDR | CLOSED_VARS | ARGS | RP ] This was made to be compatible with the `call` instruction and the `cdecl` calling convention. This commit changes the structure to: [ RP | PROC_ADDR | CLOSED_VARS | ARGS ] With this convention, the stack frame can be discarded in its entirety if we have a tail optimized procedure.
* Replace `call` with `jmp` in preparation for TCOBad Diode2021-11-161-3/+8
|
* Add proper function calls with closed variablesBad Diode2021-11-161-12/+43
|
* Add workaround for `void` return in function callsBad Diode2021-11-151-3/+11
|
* Add initial boilerplate for closure captureBad Diode2021-11-151-4/+16
|
* Fix stack on procedure call returnBad Diode2021-11-151-22/+58
|
* Add support for accessing procedure parametersBad Diode2021-11-101-3/+14
|
* Add locals for lambda proceduresBad Diode2021-11-101-3/+9
|
* Add initial local definition/accessBad Diode2021-11-101-4/+35
|
* Change Environment to store locals in arrayBad Diode2021-11-101-0/+2
| | | | This will help directly translate the locals to assembly.
* Add support for args in function callsBad Diode2021-11-101-2/+22
|
* Add display functionality for lambda objectsBad Diode2021-11-091-7/+10
|
* Add initial procedure calls for lambdasBad Diode2021-11-091-10/+35
|
* Add compilation contextBad Diode2021-11-091-141/+201
| | | | This prepares the compiler for the compilation of lambdas/procedures.
* Add support for compiling string literalsBad Diode2021-11-091-22/+108
|
* Change heap register to `r15` from `rsi` to avoid conflictsBad Diode2021-11-041-58/+62
|
* Add `cons`, `car` and `cdr` primitivesBad Diode2021-11-041-7/+65
|
* Add `if` compilationBad Diode2021-11-031-0/+22
|
* Fix behaviour of numerical comparisonsBad Diode2021-11-031-29/+19
|
* Fix behaviour of logic comparisonsBad Diode2021-11-031-41/+55
|
* Add a function to generate labelsBad Diode2021-11-021-0/+13
|
* Add numerical comparison operations (binary only)Bad Diode2021-11-021-10/+58
|
* Add `and` / `or` primitive proceduresBad Diode2021-11-021-15/+37
|
* Add `not` primitive procedureBad Diode2021-11-021-60/+93
|
* Add compilation of `display` primitiveBad Diode2021-11-021-0/+19
|
* Add type predicate primitive proceduresBad Diode2021-11-011-23/+87
| | | | Added: nil?, zero?, bool?, fixnum?
* Add support for immediate constantsBad Diode2021-11-011-7/+39
| | | | | | - Fixnums are tagged with a zero on the LSB. - The nil value is equal to exactly 1. - Boolean values have a 11 tag. A value of 111 is true and 011 false.
* Add x86_64 compilation for arithmetic expressionsv0.10Bad Diode2021-11-011-0/+115