package org.jruby.ir.operands;

import org.jruby.ir.persistence.IRReaderDecoder;
import org.jruby.ir.transformations.inlining.SimpleCloneInfo;

/**
 *
 */
public class TemporaryCurrentModuleVariable extends TemporaryLocalVariable {
    // First four scopes are so common and this operand is immutable so we share them.
    public static final TemporaryCurrentModuleVariable[] CURRENT_MODULE_VARIABLE = {
            new TemporaryCurrentModuleVariable(0), new TemporaryCurrentModuleVariable(1),
            new TemporaryCurrentModuleVariable(2), new TemporaryCurrentModuleVariable(3),
            new TemporaryCurrentModuleVariable(4)
    };

    public static TemporaryCurrentModuleVariable ModuleVariableFor(int depth) {
        return depth < CURRENT_MODULE_VARIABLE.length ? CURRENT_MODULE_VARIABLE[depth] : new TemporaryCurrentModuleVariable(depth);
    }
    
    public TemporaryCurrentModuleVariable(int offset) {
        super(offset);
    }

    @Override
    public TemporaryVariableType getType() {
        return TemporaryVariableType.CURRENT_MODULE;
    }

    public String getId() {
        return "%current_module";
    }

    @Override
    public Variable clone(SimpleCloneInfo ii) {
        return this;
    }

    public static TemporaryCurrentModuleVariable decode(IRReaderDecoder d) {
        return ModuleVariableFor(d.decodeInt());
    }
}