package org.jruby.ir.instructions;

import org.jruby.ir.Operation;
import org.jruby.ir.operands.Variable;
import org.jruby.ir.persistence.IRWriterEncoder;

/**
 * For most instrs that have a result this is their base class.  Some instrs, most notably
 * callinstr is more complicated because we would rather use inheritance to share call-related
 * logic.
 */
public abstract class ResultBaseInstr extends Instr implements ResultInstr {
    protected transient Variable result;

    public ResultBaseInstr(Operation operation, Variable result) {
        super(operation);

        this.result = result;
    }

    @Override
    public void encode(IRWriterEncoder e) {
        super.encode(e);
        e.encode(getResult());
    }

    public Variable getResult() {
        return result;
    }

    public void updateResult(Variable result) {
        this.result = result;
    }
}
