Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.instructions;
 
public class UnresolvedSuperInstr extends CallInstr {
	 // SSS FIXME: receiver is never used -- being passed in only to meet requirements of CallInstr
    public UnresolvedSuperInstr(Variable resultOperand receiverOperand[] argsOperand closure) {
        super(..result.receiverargsclosure);
    }
    public UnresolvedSuperInstr(Operation opVariable resultOperand receiverOperand closure) {
        super(op.result.receiverclosure);
    }
    @Override
    public Instr cloneForInlining(InlinerInfo ii) {
        return new UnresolvedSuperInstr(ii.getRenamedVariable(getResult()), getReceiver().cloneForInlining(ii), cloneCallArgs(ii),  == null ? null : .cloneForInlining(ii));
    }
    // We cannot convert this into a NoCallResultInstr
    @Override
    public Instr discardResult() {
        return this;
    }
    @Override
        return this;
    }
    @Override
    public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock aBlock) {
        IRubyObject[] args = prepareArguments(contextselfgetCallArgs(), currDynScopetemp);
        Block block = prepareBlock(contextselfcurrDynScopetemp);
        return interpretSuper(contextselfargsblock);
    }
    protected Object interpretSuper(ThreadContext contextIRubyObject selfIRubyObject[] argsBlock block) {
        RubyBasicObject objClass = context.runtime.getObject();
		  // We have to rely on the frame stack to find the implementation class
        RubyModule klazz = context.getFrameKlazz();
        String methodName = context.getCurrentFrame().getName();
        checkSuperDisabledOrOutOfMethod(contextklazzmethodName);
        RubyClass superClass = Helpers.findImplementerIfNecessary(self.getMetaClass(), klazz).getSuperClass();
        DynamicMethod method = superClass != null ? superClass.searchMethod(methodName) : .;
        Object rVal = method.isUndefined() ? Helpers.callMethodMissing(contextselfmethod.getVisibility(), methodName.argsblock)
                                           : method.call(contextselfsuperClassmethodNameargsblock);
        return hasUnusedResult() ? null : rVal;
    }
    protected static void checkSuperDisabledOrOutOfMethod(ThreadContext contextRubyModule frameClassString methodName) {
        // FIXME: super/zsuper in top-level script still seems to have a frameClass so it will not make it into this if
        if (frameClass == null) {
            if (methodName == null || methodName != "") {
                throw context.runtime.newNameError("superclass method '" + methodName + "' disabled"methodName);
            } else {
                throw context.runtime.newNoMethodError("super called outside of method"nullcontext.runtime.getNil());
            }
        }
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.UnresolvedSuperInstr(this);
    }
New to GrepCode? Check out our FAQ X