Package org.renjin.compiler.ir

Source Code of org.renjin.compiler.ir.ProgramCompiler

package org.renjin.compiler.ir;

import java.util.List;

import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
import org.renjin.compiler.cfg.BasicBlock;
import org.renjin.compiler.cfg.ControlFlowGraph;
import org.renjin.compiler.ir.tac.IRBody;
import org.renjin.compiler.ir.tac.IRProgram;
import org.renjin.compiler.ir.tree.TreeBuilder;
import org.renjin.compiler.ir.tree.TreeNode;
import org.renjin.sexp.SEXP;



public class ProgramCompiler implements Opcodes {

  private IRProgram program;

  public void compile(SEXP exp) {
   
    program = new IRProgram(exp);
   
    compileMain();
  }
 
  private void compileMain() {

    ClassWriter cw = new ClassWriter(0);
    FieldVisitor fv;
    MethodVisitor mv;
    AnnotationVisitor av0;
   
    cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "RProgram", null, "java/lang/Object", new String[] { });
   
    writeConstructor(cw);
    writeMainMethod(cw);
   
  }
 

  private void writeConstructor(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitCode();
    Label l0 = new Label();
    mv.visitLabel(l0);
    mv.visitLineNumber(10, l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
    mv.visitInsn(RETURN);
    Label l1 = new Label();
    mv.visitLabel(l1);
    mv.visitLocalVariable("this", "Lr/benchmarks/MeanOnline;", null, l0, l1, 0);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
  }
 

  private void writeMainMethod(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
    mv.visitCode();
    mv.visitMethodInsn(INVOKESTATIC, "org/renjin/eval/Context", "newTopLevelContext", "()Lorg/renjin/Context;");
    mv.visitVarInsn(ASTORE, 1);

   
   
    mv.visitEnd();
   
  }
 
  private void compileBody(IRBody body) {
   
    ControlFlowGraph cfg = new ControlFlowGraph(body);
    TreeBuilder builder = new TreeBuilder();
  
  }
 
}
TOP

Related Classes of org.renjin.compiler.ir.ProgramCompiler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.