gir/ir.md

160 lines
3.3 KiB
Markdown

Gir uses three types of IR, with and without offsets and flattened. Under
each section each subsection shows the properties the command object of that
type has in given IR
Without offsets
---------------
This is produced by `parse`
### add
property | value
---------|------
type | `add`
value | The number to add to current cell
Generated on `+` and `-`
### moveHead
property | value
---------|------
type | `add`
type | `moveHead`
value | The number of steps to move the tape head right
Generated on `<` and `>`
### writeByte
property | value
---------|------
type | `writeByte`
Generated on `.`
### readByte
property | value
---------|------
type | `readByte`
Generated on `,`
### loop
property | value
---------|------
type | `loop`
contents | An array of the commands making up the loop body
Generated on `[`…`]`
### clear
property | value
---------|------
type | `clear`
Not generated by the parser directly, but generated by optimizations
### writeInt
property | value
---------|------
type | `writeInt`
Generated on `:` if extensions are enabled
### readInt
property | value
---------|------
type | `readInt`
Generated on `:` if extensions are enabled
### breakPoint
property | value
---------|------
type | `breakPoint`
Generated on `#` if extensions are enabled
With offsets
------------
This is produced by the optimization pass `addOffsetProperties`
### add
property | value
---------|------
type | `add`
value | The number to add to the cell
offfset | The location of the cell relative to current tape position
### moveHead
property | value
---------|------
type | `moveHead`
value | The number of steps to move the tape head right
### writeByte
property | value
---------|------
type | `writeByte`
offset | The location of the cell relative to current tape position
### readByte
property | value
---------|------
type | `readByte`
offset | The location of the cell relative to current tape position
### loop
property | value
-----------|------
type | `loop`
contents | An array of the commands making up the loop body
isBalanced | Whether execution of the loop body ends in same cell it started in
### clear
property | value
---------|------
type | `clear`
offset | The location of the cell relative to current tape position
### multiply
property | value
---------|------
type | `multiply`
changes | Map of offsets to the number that should be added to those cells multiplies by the current cell
### writeInt
property | value
---------|------
type | `writeInt`
offset | The location of the cell relative to current tape position
### readInt
property | value
---------|------
type | `readInt`
offset | The location of the cell relative to current tape position
### breakPoint
property | value
---------|------
type | `breakPoint`
Flattened
---------
This is produced by the optimization pass `flattenLoops`. `loop` doesn't
exist in flattened IR, but all other unlisted commands are the same as in IR
with offsets
### jumpIfZero
property | value
---------|------
type | `jumpIfZero`
target | The index of the command to jump to if the current cell is zero
### jumpIfNonZero
property | value
---------|------
type | `jumpIfNonZero`
target | The index of the command to jump to if the current cell is nonzero