From acf7b4eff8be110a65aaba7bdebe9f7625270b31 Mon Sep 17 00:00:00 2001 From: 404Simon Date: Mon, 20 May 2024 17:53:15 +0200 Subject: [PATCH] accurately depicted stack size --- .../java/de/maishai/typedast/typedclass/TypedAssignment.java | 5 ++++- .../java/de/maishai/typedast/typedclass/TypedReturn.java | 4 +++- src/main/resources/JavaTestfiles/ClassCanBeBytecoded.java | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java b/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java index 922664c..fd2a733 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedAssignment.java @@ -98,7 +98,7 @@ public class TypedAssignment implements TypedStatement { } ctx.getMv().visitFieldInsn(Opcodes.PUTFIELD, receiver, location.getName(), value.getType().getDescriptor()); System.out.println("PUTFIELD: " + receiver + " " + location.getName() + " " + value.getType().getDescriptor()); - + ctx.popStack(); } else { if(value.getType().getKind() == Type.Kind.REFERENCE) { System.out.println("ASTORE " + ctx.getLocalVar(location.getName()).get().index()); @@ -115,5 +115,8 @@ public class TypedAssignment implements TypedStatement { location.getRecursiveOwnerChain().codeGen(ctx); ctx.pushAnonToStack(); } + if (location.getRecursiveOwnerChain() == null && location.getField()) { + ctx.pushStack("this"); + } } } diff --git a/src/main/java/de/maishai/typedast/typedclass/TypedReturn.java b/src/main/java/de/maishai/typedast/typedclass/TypedReturn.java index 06a854e..b7599c2 100644 --- a/src/main/java/de/maishai/typedast/typedclass/TypedReturn.java +++ b/src/main/java/de/maishai/typedast/typedclass/TypedReturn.java @@ -47,13 +47,15 @@ public class TypedReturn implements TypedStatement { public void codeGen(MethodContext ctx) { if (ret == null) { ctx.getMv().visitInsn(Opcodes.RETURN); + System.out.println("RETURN"); } else { - System.out.println("return: " + ret); ret.codeGen(ctx); if (ret.getType().getKind() != Type.Kind.REFERENCE) { ctx.getMv().visitInsn(Opcodes.IRETURN); + System.out.println("IRETURN"); } else { ctx.getMv().visitInsn(Opcodes.ARETURN); + System.out.println("ARETURN"); } } diff --git a/src/main/resources/JavaTestfiles/ClassCanBeBytecoded.java b/src/main/resources/JavaTestfiles/ClassCanBeBytecoded.java index a4f48ad..d479b86 100644 --- a/src/main/resources/JavaTestfiles/ClassCanBeBytecoded.java +++ b/src/main/resources/JavaTestfiles/ClassCanBeBytecoded.java @@ -1,4 +1,5 @@ public class ClassCanBeBytecoded { + public ClassCanBeBytecoded c; public ClassCanBeBytecoded() { } @@ -15,6 +16,7 @@ public class ClassCanBeBytecoded { ClassCanBeBytecoded c; c = new ClassCanBeBytecoded(result); result = var1 + var1; + this.c = c; return c; } } \ No newline at end of file