Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.instructions;
 
 import org.jruby.Ruby;
// SSS FIXME: Should we merge DefineInstanceMethod and DefineClassMethod instructions?
// identical except for 1 bit in interpret -- or will they diverge?
public class DefineClassMethodInstr extends Instr {
    private Operand container;
    private final IRMethod method;
    public DefineClassMethodInstr(Operand containerIRMethod method) {
        super(.);
        this. = container;
        this. = method;
    }
    @Override
    public String toString() {
        return getOperation() + "(" +  + ", " + .getName() + ", " + .getFileName() + ")";
    }
    public IRMethod getMethod() {
        return ;
    }
    @Override
    public Instr cloneForInlining(InlinerInfo ii) {
        // SSS FIXME: So, what happens to the method?
        return new DefineClassMethodInstr(.cloneForInlining(ii), );
    }
    // SSS FIXME: Go through this and DefineInstanceMethodInstr.interpret, clean up, extract common code
    @Override
    public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock block) {
        String name = .getName();
        Ruby runtime = context.runtime;
        RubyObject obj = (RubyObject.retrieve(contextselfcurrDynScopetemp);
        if (obj instanceof RubyFixnum || obj instanceof RubySymbol) {
            throw runtime.newTypeError("can't define singleton method \"" + name + "\" for " + obj.getMetaClass().getBaseName());
        }
        if (obj.isFrozen()) throw runtime.newFrozenError("object");
        RubyClass rubyClass = obj.getSingletonClass();
        rubyClass.addMethod(namenew InterpretedIRMethod(.rubyClass));
        obj.callMethod(context"singleton_method_added"runtime.fastNewSymbol(name));
        return null;
    }
    public Operand[] getOperands() {
        return new Operand[]{};
    }
    @Override
    public void simplifyOperands(Map<OperandOperandvalueMapboolean force) {
         = .getSimplifiedOperand(valueMapforce);
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.DefineClassMethodInstr(this);
    }
New to GrepCode? Check out our FAQ X