gir/ir.md

3.3 KiB

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