Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
 package org.jruby.ir.instructions.defined;
 

Author(s):
enebo
public class MethodIsPublicInstr extends DefinedObjectNameInstr {
    public MethodIsPublicInstr(Variable resultOperand objectStringLiteral name) {
        super(.resultnew Operand[] { objectname });
    }
    @Override
    public Instr cloneForInlining(InlinerInfo inlinerInfo) {
        return new MethodIsPublicInstr((VariablegetResult().cloneForInlining(inlinerInfo), 
                getObject().cloneForInlining(inlinerInfo),
                (StringLiteralgetName().cloneForInlining(inlinerInfo));
    }
    // ENEBO: searchMethod on bad name returns undefined method...so we use that visibility?
    private boolean isPublic(IRubyObject objectString name) {
        RubyClass metaClass = object.getMetaClass();
        Visibility  visibility   = metaClass.searchMethod(name).getVisibility();
        
        return visibility != null && !visibility.isPrivate() && 
                !(visibility.isProtected() && metaClass.getRealClass().isInstance(object));
    }
    @Override
    public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock block) {
        IRubyObject receiver = (IRubyObjectgetObject().retrieve(contextselfcurrDynScopetemp);
        
        return context.runtime.newBoolean(isPublic(receivergetName().));        
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.MethodIsPublicInstr(this);
    }
New to GrepCode? Check out our FAQ X