seperate classfile generation from codegen

This commit is contained in:
404Simon 2024-05-08 10:49:41 +02:00
parent debbea7736
commit 98d899e026
3 changed files with 5 additions and 6 deletions

View File

@ -17,8 +17,7 @@ public class CodeGenUtils {
return builder.toString(); return builder.toString();
} }
public static void writeClassfile(ClassWriter cw, String name) { public static void writeClassfile(byte[] code, String name) {
byte[] code = cw.toByteArray();
try { try {
FileOutputStream fos = new FileOutputStream("output/" + name + ".class"); FileOutputStream fos = new FileOutputStream("output/" + name + ".class");
fos.write(code); fos.write(code);

View File

@ -5,7 +5,6 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor
@Data @Data
public class MethodContext { public class MethodContext {
} }

View File

@ -63,7 +63,7 @@ public class TypedClass implements TypedNode {
return typedClass; return typedClass;
} }
public void codeGen() { public byte[] codeGen() {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, typedId.getName(), null, "java/lang/Object", null); cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, typedId.getName(), null, "java/lang/Object", null);
for (TypedField field : typedFields) { for (TypedField field : typedFields) {
@ -78,7 +78,7 @@ public class TypedClass implements TypedNode {
//m.codeGen(cw); //m.codeGen(cw);
} }
CodeGenUtils.writeClassfile(cw, typedId.getName()); return cw.toByteArray();
} }
@ -99,6 +99,7 @@ public class TypedClass implements TypedNode {
c.typedMethods = new ArrayList<>(); c.typedMethods = new ArrayList<>();
//codeGen //codeGen
c.codeGen(); byte[] code = c.codeGen();
CodeGenUtils.writeClassfile(code, "SomeClass");
} }
} }