func (c Combine) WithDestReg(r Register) Instruction {
	c.Dst = r
	return c
}
WithDestReg returns the same isntruction with a new destination register.
package ir
import (
	"fmt"
	"strings"
	"github.com/arnodel/golua/ops"
)
type Instruction interface {
	fmt.Stringer
	ProcessInstr(InstrProcessor)
}
type SetRegInstruction interface {
	DestReg() Register
	WithDestReg(Register) Instruction
}
type InstrProcessor interface {
	ProcessCombineInstr(Combine)
	ProcessTransformInstr(Transform)
	ProcessLoadConstInstr(LoadConst)
	ProcessPushInstr(Push)
	ProcessJumpInstr(Jump)
	ProcessJumpIfInstr(JumpIf)
	ProcessCallInstr(Call)
	ProcessMkClosureInstr(MkClosure)
	ProcessMkContInstr(MkCont)
	ProcessClearRegInstr(ClearReg)
	ProcessMkTableInstr(MkTable)
	ProcessLookupInstr(Lookup)
	ProcessSetIndexInstr(SetIndex)
	ProcessReceiveInstr(Receive)
	ProcessReceiveEtcInstr(ReceiveEtc)
	ProcessEtcLookupInstr(EtcLookup)
	ProcessFillTableInstr(FillTable)
	ProcessTakeRegisterInstr(TakeRegister)
	ProcessReleaseRegisterInstr(ReleaseRegister)
	ProcessDeclareLabelInstr(DeclareLabel)
}
type Register uint
func (r Register) String() string {
	return fmt.Sprintf("r%d", r)
}
type Label uint
func (l Label) String() string {
	return fmt.Sprintf("L%d", l)
}
type Combine struct {
	Op   ops.Op    
	Dst  Register  
	Lsrc Register  
	Rsrc Register  
}
func (c Combine) DestReg() Register {
	return c.Dst
}