Add classFIleOutput folder

This commit is contained in:
i22007 2024-05-08 11:21:42 +02:00
parent d0448b01cd
commit d131d412f0
4 changed files with 40 additions and 13 deletions

Binary file not shown.

View File

@ -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,
"<init>",
"()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);

View File

@ -0,0 +1,10 @@
package bytecode;
import org.objectweb.asm.ClassWriter;
public class FieldCodeGen {
public void generateFieldCode(ClassWriter classWriter) {
}
}

View File

@ -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,
"<init>",
"()V",
null,
null);
}
}