Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ir.instructions;
  
  import org.jruby.Ruby;
 
 import java.util.Map;
 
 public class DefineInstanceMethodInstr extends Instr {
     private Operand container;
     private final IRMethod method;
 
     public DefineInstanceMethodInstr(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 DefineInstanceMethodInstr(.cloneForInlining(ii), );
     }
 
     // SSS FIXME: Go through this and DefineClassMethodInstr.interpret, clean up, extract common code
     @Override
     public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock block) {
         // SSS FIXME: This is a temporary solution that uses information from the stack.
         // This instruction and this logic will be re-implemented to not use implicit information from the stack.
         // Till such time, this code implements the correct semantics.
         RubyModule clazz = context.getRubyClass();
         String     name  = .getName();
 
         // Error checks and warnings on method definitions
         Ruby runtime = context.runtime;
         if (clazz == runtime.getDummy()) {
             throw runtime.newTypeError("no class/module to add method");
         }
 
         if (clazz == runtime.getObject() && "initialize".equals(name)) {
             runtime.getWarnings().warn(."redefining Object#initialize may cause infinite loop");
         }
 
         if ("__id__".equals(name) || "__send__".equals(name)) {
             runtime.getWarnings().warn(."redefining `" + name + "' may cause serious problem");
         }
 
         Visibility visibility = context.getCurrentVisibility();
         if ("initialize".equals(name) || "initialize_copy".equals(name) || visibility == .) {
             visibility = .;
         }
 
         DynamicMethod newMethod = new InterpretedIRMethod(visibilityclazz);
         clazz.addMethod(namenewMethod);
         //System.out.println("Added " + name + " to " + clazz + "; self is " + self);
 
         if (context.getCurrentVisibility() == .) {
             clazz.getSingletonClass().addMethod(namenew WrapperMethod(clazz.getSingletonClass(), newMethod.));
             clazz.callMethod(context"singleton_method_added"runtime.fastNewSymbol(name));
         }
 
         // 'class << state.self' and 'class << obj' uses defn as opposed to defs
         if (clazz.isSingleton()) {
             ((MetaClassclazz).getAttached().callMethod(context"singleton_method_added"runtime.fastNewSymbol(name));
         } else {
             clazz.callMethod(context"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.DefineInstanceMethodInstr(this);
    }
New to GrepCode? Check out our FAQ X