Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ir.targets;
  
 import  org.objectweb.asm.ClassVisitor;
 import  org.objectweb.asm.ClassWriter;
 import  org.objectweb.asm.Type;
 
 import java.util.List;
 
 import static org.jruby.util.CodegenUtils.ci;
 import static org.jruby.util.CodegenUtils.p;
 import static org.objectweb.asm.Opcodes.*;
 
 // This class represents JVM as the target of compilation
 // and outputs bytecode
 public class JVM {
     private static final Logger LOG = LoggerFactory.getLogger("IRBuilder");
 
     Stack<ClassDataclsStack = new Stack();
     ClassWriter writer;
 
     public JVM() {
     }
 
     public static final int CMP_EQ = 0;
 
     public byte[] code() {
         return .toByteArray();
     }
 
     public ClassVisitor cls() {
         return clsData().;
     }
 
     public ClassData clsData() {
         return .peek();
     }
 
     public MethodData methodData() {
         return clsData().methodData();
     }
 
     public void pushclass(String clsName) {
         PrintWriter pw = new PrintWriter(.);
         .push(new ClassData(clsNamenew ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS)));
         pw.flush();
     }
 
     public void pushscript(String clsNameString filename) {
         PrintWriter pw = new PrintWriter(.);
          = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
         .push(new ClassData(clsName));
 
         cls().visit(., ACC_PUBLIC + ACC_SUPER, clsNamenullp(Object.class), null);
         cls().visitSource(filenamenull);
         pw.flush();
     }
 
     public void popclass() {
         .pop();
     }
 
     public IRBytecodeAdapter method() {
         return clsData().method();
     }
 
     public void pushmethod(String nameint arity) {
         clsData().pushmethod(namearity);
         method().startMethod();
 
         // locals for ThreadContext and self
         methodData().local("$context".);
         methodData().local("$scope".);
         methodData().local("$self");//, JVM.OBJECT_TYPE);
         for (int i = 0; i < arityi++) {
             // incoming arguments
             methodData().local("$argument" + i);
         }
         methodData().local("$block", Type.getType(Block.class));
 
         // TODO: this should go into the PushBinding instruction
         methodData().local("$dynamicScope");
     }
 
     public void popmethod() {
         clsData().popmethod();
     }
 
     public static String scriptToClass(String name) {
        if (name.equals("-e")) {
            return "DashE";
        } else {
            return JavaNameMangler.mangledFilenameForStartupClasspath(name);
        }
    }
    public void declareField(String field) {
        if (!clsData()..contains(field)) {
            cls().visitField(ACC_PROTECTED, fieldci(Object.class), nullnull);
            clsData()..add(field);
        }
    }
    public static final Class OBJECT = IRubyObject.class;
    public static final Class BLOCK = Block.class;
    public static final Class THREADCONTEXT = ThreadContext.class;
    public static final Class STATICSCOPE = StaticScope.class;
    public static final Type OBJECT_TYPE = Type.getType();
    public static final Type BLOCK_TYPE = Type.getType();
    public static final Type THREADCONTEXT_TYPE = Type.getType();
    public static final Type STATICSCOPE_TYPE = Type.getType();
New to GrepCode? Check out our FAQ X