diff --git a/classFileOutput/Example.class b/classFileOutput/Example.class new file mode 100644 index 0000000..e44ef84 Binary files /dev/null and b/classFileOutput/Example.class differ diff --git a/src/main/java/bytecode/ByteCodeGenerator.java b/src/main/java/bytecode/ByteCodeGenerator.java index b69b823..aa0a117 100644 --- a/src/main/java/bytecode/ByteCodeGenerator.java +++ b/src/main/java/bytecode/ByteCodeGenerator.java @@ -2,8 +2,8 @@ package bytecode; import java.io.FileOutputStream; import java.io.IOException; + import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import parser.ClassDeclarationNode; import parser.ProgramNode; @@ -12,24 +12,25 @@ public class ByteCodeGenerator { public void generateByteCode(ProgramNode ast) { for (ClassDeclarationNode classDeclarationNode : ast.classes) { - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, classDeclarationNode.identifier, null, - "java/lang/Object", null); + ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + classWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, classDeclarationNode.identifier, null, + "java/lang/Object", null); - MethodVisitor constructor = - cw.visitMethod(Opcodes.ACC_PUBLIC, - "", - "()V", - null, - null); - cw.visitEnd(); + FieldCodeGen fieldCodeGen = new FieldCodeGen(); + fieldCodeGen.generateFieldCode(classWriter); - printIntoClassFile(cw.toByteArray(), classDeclarationNode.identifier); + MethodCodeGen methodCodeGen = new MethodCodeGen(); + methodCodeGen.generateMethodCode(classWriter); + + classWriter.visitEnd(); + printIntoClassFile(classWriter.toByteArray(), classDeclarationNode.identifier); + + classWriter.visitEnd(); } } private void printIntoClassFile(byte[] byteCode, String name) { - String filePath = name + ".class"; + String filePath = "./classFileOutput/" + name + ".class"; try { FileOutputStream fileOutputStream = new FileOutputStream(filePath); diff --git a/src/main/java/bytecode/FieldCodeGen.java b/src/main/java/bytecode/FieldCodeGen.java new file mode 100644 index 0000000..4cca429 --- /dev/null +++ b/src/main/java/bytecode/FieldCodeGen.java @@ -0,0 +1,10 @@ +package bytecode; + +import org.objectweb.asm.ClassWriter; + +public class FieldCodeGen { + + public void generateFieldCode(ClassWriter classWriter) { + + } +} diff --git a/src/main/java/bytecode/MethodCodeGen.java b/src/main/java/bytecode/MethodCodeGen.java new file mode 100644 index 0000000..a54fda8 --- /dev/null +++ b/src/main/java/bytecode/MethodCodeGen.java @@ -0,0 +1,16 @@ +package bytecode; + +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +public class MethodCodeGen { + public void generateMethodCode(ClassWriter classWriter) { + MethodVisitor constructor = + classWriter.visitMethod(Opcodes.ACC_PUBLIC, + "", + "()V", + null, + null); + } +}