Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.instructions;
 
 import org.jruby.Ruby;
/*
 * Finds the module that will hold class vars for the object that is being queried.
 * A candidate static IRMethod is also passed in.
 */
// SSS FIXME: Split into 2 different instrs?
public class GetClassVarContainerModuleInstr extends Instr implements ResultInstr {
    private Operand  startingScope;
    private Operand  object;
    private Variable result;
    public GetClassVarContainerModuleInstr(Variable resultOperand startingScopeOperand object) {
        super(.);
        assert result != null;
        this. = startingScope;
        this. = object;
        this. = result;
    }
    @Override
    public Instr cloneForInlining(InlinerInfo ii) {
        return new GetClassVarContainerModuleInstr(ii.getRenamedVariable(), .cloneForInlining(ii),  == null ? null : .cloneForInlining(ii));
    }
    @Override
    public String toString() {
        return super.toString() + "(" +  + ", " +  + ")";
    }
    public Operand[] getOperands() {
        return  == null ? new Operand[] {} : new Operand[] {};
    }
    public Variable getResult() {
        return ;
    }
    public void updateResult(Variable v) {
        this. = v;
    }
    @Override
    public void simplifyOperands(Map<OperandOperandvalueMapboolean force) {
         = .getSimplifiedOperand(valueMapforce);
        if ( != null = .getSimplifiedOperand(valueMapforce);
    }
    @Override
    public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock block) {
        Ruby        runtime   = context.runtime;
        StaticScope scope     = (StaticScope.retrieve(contextselfcurrDynScopetemp);
        RubyModule  rubyClass = scope.getModule();
        // SSS FIXME: Copied from ASTInterpreter.getClassVariableBase and adapted
        while (scope != null && (rubyClass.isSingleton() || rubyClass == runtime.getDummy())) {
            scope = scope.getPreviousCRefScope();
            rubyClass = scope.getModule();
            if (scope.getPreviousCRefScope() == null) {
                runtime.getWarnings().warn(."class variable access from toplevel singleton method");
            }
        }
        if ((scope == null) && ( != null)) {
            // We ran out of scopes to check -- look in arg's metaclass
            IRubyObject arg = (IRubyObject.retrieve(contextselfcurrDynScopetemp);
            rubyClass = arg.getMetaClass();
        }
        if (rubyClass == null) {
            throw context.runtime.newTypeError("no class/module to define class variable");
        }
        return rubyClass;
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.GetClassVarContainerModuleInstr(this);
    }
New to GrepCode? Check out our FAQ X