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