gir/ir.md

2.0 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

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

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

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