gir/ir.md

1.6 KiB

Gir uses two types of IR, with and without offsets

Without offsets

This is produced by parse. Each subsection shows the properties the command object of that type has in IR without offsets

add

type | add value | The number to add to current cell

Generated on + and -

moveHead

type | moveHead value | The number of steps to move the tape head right

Generated on < and >

writeByte

type | writeByte

Generated on .

readByte

type | readByte

Generated on ,

loop

type | loop contents | An array of the commands making up the loop body

Generated on []

clear

type | clear

Not generated by the parser directly, but generated by optimizations

With offsets

This is produced by the optimization pass addOffsetProperties. Each subsection shows the properties the command object of that type has in IR with offsets

add

type | add value | The number to add to the cell offfset | The location of the cell relative to current tape position

moveHead

type | moveHead value | The number of steps to move the tape head right

writeByte

type | writeByte offset | The location of the cell relative to current tape position

readByte

type | readByte offset | The location of the cell relative to current tape position

loop

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

type | clear offset | The location of the cell relative to current tape position