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.targets;
  
  import org.jruby.Ruby;
 import  org.objectweb.asm.Handle;
 import  org.objectweb.asm.Opcodes;
 import  org.objectweb.asm.Type;
 import  org.objectweb.asm.commons.Method;
 
 import java.util.Map;
 
 import static org.jruby.util.CodegenUtils.*;

Author(s):
headius
 
 public class IRBytecodeAdapter {
     public IRBytecodeAdapter(SkinnyMethodAdapter adapterint arityString... params) {
         this. = adapter;
         this. = arity;
         this. = params;
     }
 
     public void startMethod() {
         .start();
     }
 
     public void endMethod() {
         .end(new Runnable() {
             public void run() {
                 for (Map.Entry<Integer, Type> entry : .entrySet()) {
                     int i = entry.getKey();
                     String name = .get(i);
                     .local(inameentry.getValue());
                 }
             }
         });
     }
 
     public void push(Long l) {
         .aload(0);
         .invokedynamic("fixnum"sig(.ThreadContext.class), Bootstrap.fixnum(), l);
     }
 
     public void push(ByteList bl) {
         .aload(0);
         .invokedynamic("string"sig(.ThreadContext.class), Bootstrap.string(), new String(bl.bytes(), .), bl.getEncoding().getIndex());
     }

    
Push a symbol on the stack

Parameters:
sym the symbol's string identifier
 
     public void push(String sym) {
         .aload(0);
         .invokedynamic("symbol"sig(.ThreadContext.class), Bootstrap.symbol(), sym);
     }
 
     public void pushRuntime() {
         .aload(0);
         .getfield(p(ThreadContext.class), "runtime"ci(Ruby.class));
     }
 
     public void loadLocal(int i) {
         .aload(i);
     }
 
     public void loadContext() {
         .aload(0);
     }
 
     public void loadStaticScope() {
         .aload(1);
     }
 
     public void loadSelf() {
         .aload(2);
     }
 
     public void storeLocal(int i) {
         .astore(i);
     }
 
    public void invokeOther(String nameint arity) {
        .invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(name), sig(.params(ThreadContext.class..arity)), Bootstrap.invoke());
    }
    public void invokeSelf(String nameint arity) {
        .invokedynamic("invokeSelf:" + JavaNameMangler.mangleMethodName(name), sig(.params(ThreadContext.class..arity)), Bootstrap.invokeSelf());
    }
    public void invokeFixnumOp(String namelong value) {
        .invokedynamic("fixnumOperator:" + JavaNameMangler.mangleMethodName(name), sig(.params(ThreadContext.class..)), Bootstrap.invokeFixnumOp(), value"--dummy--", -1);
    }
    public void invokeSuper(String nameint arity) {
        .invokedynamic("invokeSuper:" + JavaNameMangler.mangleMethodName(name), sig(.params(ThreadContext.class..arity)), new Handle(Opcodes.H_INVOKESTATIC, "dummy""dummy""(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;J)Ljava/lang/invoke/CallSite;"));
    }
    public void invokeOtherBoolean(String nameint arity) {
        .invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(name), sig(boolean.classparams(ThreadContext.class..arity)), new Handle(Opcodes.H_INVOKESTATIC, "dummy""dummy""(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;J)Ljava/lang/invoke/CallSite;"));
    }
    public void invokeSelfBoolean(String nameint arity) {
        .invokedynamic("invokeSelf:" + JavaNameMangler.mangleMethodName(name), sig(boolean.classparams(ThreadContext.class..arity)), new Handle(Opcodes.H_INVOKESTATIC, "dummy""dummy""(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;J)Ljava/lang/invoke/CallSite;"));
    }
    public void attrAssign(String name) {
        .invokedynamic("attrAssign:" + JavaNameMangler.mangleMethodName(name), sig(.ThreadContext.class..), Bootstrap.attrAssign());
    }
    public void invokeVirtual(Type type, Method method) {
        .invokevirtual(type.getInternalName(), method.getName(), method.getDescriptor());
    }
    public void invokeHelper(String nameClass... sig) {
        .invokestatic(p(RuntimeHelpers.class), namesig(sig));
    }
    public void invokeHelper(String nameString sig) {
        .invokestatic(p(RuntimeHelpers.class), namesig);
    }
    public void searchConst(String name) {
        .invokedynamic("searchConst:" + namesig(.params(ThreadContext.classStaticScope.class)), Bootstrap.searchConst());
    }
    public void inheritanceSearchConst(String name) {
        .invokedynamic("inheritanceSearchConst:" + namesig(.params(ThreadContext.classIRubyObject.class)), Bootstrap.inheritanceSearchConst());
    }
    public void goTo(org.objectweb.asm.Label label) {
        .go_to(label);
    }
    public void isTrue() {
        .invokeinterface(p(IRubyObject.class), "isTrue"sig(boolean.class));
    }
    public void isNil() {
        .invokeinterface(p(IRubyObject.class), "isNil"sig(boolean.class));
    }
    public void bfalse(org.objectweb.asm.Label label) {
        .iffalse(label);
    }
    public void btrue(org.objectweb.asm.Label label) {
        .iftrue(label);
    }
    public void poll() {
        .aload(0);
        .invokevirtual(p(ThreadContext.class), "pollThreadEvents"sig(void.class));
    }
    public void pushNil() {
        .aload(0);
        .getfield(p(ThreadContext.class), "nil"ci(IRubyObject.class));
    }
    public void pushBoolean(boolean b) {
        .aload(0);
        .getfield(p(ThreadContext.class), "runtime"ci(Ruby.class));
        if (b) {
            .invokevirtual(p(Ruby.class), "getTrue"sig(RubyBoolean.class));
        } else {
            .invokevirtual(p(Ruby.class), "getFalse"sig(RubyBoolean.class));
        }
    }
    public void pushObjectClass() {
        .aload(0);
        .getfield(p(ThreadContext.class), "runtime"ci(Ruby.class));
        .invokevirtual(p(Ruby.class), "getObject"sig(RubyClass.class));
    }
    public void pushUndefined() {
        .getstatic(p(UndefinedValue.class), "UNDEFINED"ci(UndefinedValue.class));
    }
    
    public void pushHandle(String classNameString methodNameint arity) {
        .getMethodVisitor().visitLdcInsn(new Handle(Opcodes.H_INVOKESTATIC, classNamemethodName.[arity]));
    }
    public void mark(org.objectweb.asm.Label label) {
        .label(label);
    }
    public void putField(String name) {
        .invokedynamic("ivarSet:" + JavaNameMangler.mangleMethodName(name), sig(void.classIRubyObject.classIRubyObject.class), Bootstrap.ivar());
    }
    public void getField(String name) {
        .invokedynamic("ivarGet:" + JavaNameMangler.mangleMethodName(name), sig(.IRubyObject.class), Bootstrap.ivar());
    }
    public void returnValue() {
        .areturn();
    }
    public void array(int length) {
        .invokedynamic("array"sig(.params(ThreadContext.class.length)), Bootstrap.array());
    }
    public int newLocal(String name, Type type) {
        int index = ++;
        .put(indextype);
        .put(indexname);
        return index;
    }
    public org.objectweb.asm.Label newLabel() {
        return new org.objectweb.asm.Label();
    }
    private int variableCount = 0;
    private Map<Integer, Type> variableTypes = new HashMap<Integer, Type>();
    private Map<IntegerStringvariableNames = new HashMap<IntegerString>();
    private int arity;
    private String[] params;
New to GrepCode? Check out our FAQ X