From 7fbe61a97ca8c9a257bd58fc4757fcea9caffaf8 Mon Sep 17 00:00:00 2001 From: Parker TenBroeck <51721964+ParkerTenBroeck@users.noreply.github.com> Date: Thu, 1 May 2025 15:32:43 -0400 Subject: [PATCH] cleaned up code, made generated classes inner by default, improved names --- src/AsyncExamples.java | 4 +- src/Main.java | 4 +- .../loadtime/StateMachineBuilder.java | 43 +++++++------------ .../loadtime/future/FutureSMBuilder.java | 7 +-- src/generators/loadtime/gen/GenSMBuilder.java | 7 +-- 5 files changed, 21 insertions(+), 44 deletions(-) diff --git a/src/AsyncExamples.java b/src/AsyncExamples.java index 252dfd0..592c19c 100644 --- a/src/AsyncExamples.java +++ b/src/AsyncExamples.java @@ -12,8 +12,8 @@ import java.nio.charset.StandardCharsets; public class AsyncExamples { - static long sent = 0; - static long received = 0; + private static long sent = 0; + private static long received = 0; public static Future test(){ Jokio.runtime().await().spawn(server()); diff --git a/src/Main.java b/src/Main.java index 2ca6011..2f6d060 100644 --- a/src/Main.java +++ b/src/Main.java @@ -11,8 +11,8 @@ public class Main implements Runnable { @Override public void run() { -// await(); - lexer(); + await(); +// lexer(); } diff --git a/src/generators/loadtime/StateMachineBuilder.java b/src/generators/loadtime/StateMachineBuilder.java index 661d0ad..32e4bb3 100644 --- a/src/generators/loadtime/StateMachineBuilder.java +++ b/src/generators/loadtime/StateMachineBuilder.java @@ -10,15 +10,15 @@ import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; import java.lang.reflect.AccessFlag; import java.util.*; +import java.util.stream.Collectors; public abstract class StateMachineBuilder { public final static String PARAM_PREFIX = "param_"; public final static String LOCAL_PREFIX = "local_"; public final static String STATE_NAME = "state"; - private static int sequence; - public final ClassDesc CD_this; + public final String innerClassName; public final ClassDesc[] params; public final MethodTypeDesc MTD_init; public final int paramSlotOff; @@ -30,7 +30,8 @@ public abstract class StateMachineBuilder { ArrayList lstate = new ArrayList<>(); private final ArrayList frames = new ArrayList<>(); - private final ArrayList handlers = new ArrayList<>(); + + protected final HashMap smmap = new HashMap<>(); record LState(String name, ClassDesc cd) { } @@ -39,14 +40,6 @@ public abstract class StateMachineBuilder { SpecialMethodHandler build(StateMachineBuilder smb, CodeBuilder cob, StateBuilder sb); } - protected HashMap smmap = new HashMap<>(); - -// private final ArrayList stateSwitchCases = new ArrayList<>(); - - protected String uniqueName(){ - return sequence+++""; - } - public void params(int slot_start, ParamConsumer consumer){ int offset = 0; for (var param : params) { @@ -55,7 +48,7 @@ public abstract class StateMachineBuilder { } } - public StateMachineBuilder(ClassModel src_clm, MethodModel src_mem, CodeModel src_com){ + public StateMachineBuilder(ClassModel src_clm, MethodModel src_mem, CodeModel src_com, String namePostfix){ this.src_clm = src_clm; this.src_mem = src_mem; this.src_com = src_com; @@ -65,25 +58,22 @@ public abstract class StateMachineBuilder { if (!src_mem.flags().has(AccessFlag.STATIC)) { mts = mts.insertParameterTypes(0, src_clm.thisClass().asSymbol()); } - var name = src_clm.thisClass().asSymbol().displayName() + "$" + src_mem.methodName().stringValue() + "$" + uniqueName(); + var cdn = src_clm.thisClass().asSymbol().displayName(); + var method_name = src_mem.methodName().stringValue(); + var param_cnd = src_mem.methodTypeSymbol().parameterList().stream().map(desc -> desc.descriptorString().replace("/", "__").replace(";", "__")).collect(Collectors.joining("$")); + innerClassName = method_name + "$$" + param_cnd + "$$"; + var name = cdn + "$" +innerClassName; this.CD_this = ClassDesc.of(src_clm.thisClass().asSymbol().packageName(), name); this.params = mts.parameterArray(); this.MTD_init = MethodTypeDesc.of(ConstantDescs.CD_void, params); this.paramSlotOff = Arrays.stream(params).mapToInt(p -> TypeKind.from(p).slotSize()).sum(); - - System.out.println("FRAME"); var lt = new FrameTracker(this, src_com); - int bco = 0; for(var coe : src_com){ - if(coe instanceof Instruction i) { + if(coe instanceof Instruction) frames.add(new Frame(lt.locals(), lt.stack())); - System.out.println(bco + " " + frames.getLast() + " " + coe); - bco += i.sizeInBytes(); - } lt.encounter(coe); - } frames.add(new Frame(lt.locals(), lt.stack())); } @@ -111,11 +101,6 @@ public abstract class StateMachineBuilder { }; } -// public int add_state(Label label) { -// stateSwitchCases.add(SwitchCase.of(stateSwitchCases.size(), label)); -// return stateSwitchCases.size() - 1; -// } - public void buildSourceMethodShim(CodeBuilder cob){ cob.new_(CD_this).dup(); params(0, (_, slot, type) -> { @@ -125,7 +110,7 @@ public abstract class StateMachineBuilder { } public boolean shouldBeInnerClass(){ - return false; + return true; } public byte[] buildStateMachine(){ @@ -133,7 +118,7 @@ public abstract class StateMachineBuilder { if(shouldBeInnerClass()){ src_clm.findAttributes(Attributes.sourceFile()).forEach(clb::with); - clb.with(InnerClassesAttribute.of(InnerClassInfo.of(CD_this, Optional.of(src_clm.thisClass().asSymbol()), Optional.of(CD_this.displayName().split("\\$")[1]), AccessFlag.PUBLIC, AccessFlag.FINAL, AccessFlag.STATIC))); + clb.with(InnerClassesAttribute.of(InnerClassInfo.of(CD_this, Optional.of(src_clm.thisClass().asSymbol()), Optional.of(innerClassName), AccessFlag.PUBLIC, AccessFlag.FINAL, AccessFlag.STATIC))); clb.with(NestHostAttribute.of(src_clm.thisClass())); } @@ -183,6 +168,8 @@ public abstract class StateMachineBuilder { public void buildStateMachineCode(ClassBuilder clb, CodeBuilder cob, int loc_param_off) { var stateBuilder = new StateBuilder(); + var handlers = new ArrayList(); + boolean ignore_next_pop = false; var invalid_state = cob.newLabel(); diff --git a/src/generators/loadtime/future/FutureSMBuilder.java b/src/generators/loadtime/future/FutureSMBuilder.java index 2ae9685..f4ed74c 100644 --- a/src/generators/loadtime/future/FutureSMBuilder.java +++ b/src/generators/loadtime/future/FutureSMBuilder.java @@ -154,11 +154,6 @@ public class FutureSMBuilder extends StateMachineBuilder { } } - @Override - protected String uniqueName() { - return "Fut"; - } - @Override protected void buildStateMachineMethod(ClassBuilder clb){ clb.withInterfaces(List.of(clb.constantPool().classEntry(CD_Future))); @@ -177,7 +172,7 @@ public class FutureSMBuilder extends StateMachineBuilder { } public FutureSMBuilder(ClassModel src_clm, MethodModel src_mem, CodeModel src_com) { - super(src_clm, src_mem, src_com); + super(src_clm, src_mem, src_com, "Fut"); smmap.put(new SpecialMethod(CD_Future, "await", MTD_Obj), AwaitHandler::new); smmap.put(new SpecialMethod(CD_Future, "ret", MTD_Future_Obj), RetHandler::new); smmap.put(new SpecialMethod(CD_Future, "ret", MTD_Future), RetVoidHandler::new); diff --git a/src/generators/loadtime/gen/GenSMBuilder.java b/src/generators/loadtime/gen/GenSMBuilder.java index 64fa17c..e683e04 100644 --- a/src/generators/loadtime/gen/GenSMBuilder.java +++ b/src/generators/loadtime/gen/GenSMBuilder.java @@ -95,18 +95,13 @@ public class GenSMBuilder extends StateMachineBuilder { } public GenSMBuilder(ClassModel src_clm, MethodModel src_mem, CodeModel src_com) { - super(src_clm, src_mem, src_com); + super(src_clm, src_mem, src_com, "Gen"); smmap.put(new SpecialMethod(CD_Gen, "yield", MTD_Gen_Obj),(smb, cob, sb) -> new YieldHandler(smb, cob, sb, false)); smmap.put(new SpecialMethod(CD_Gen, "yield", MTD_Gen),(smb, cob, sb) -> new YieldHandler(smb, cob, sb,true)); smmap.put(new SpecialMethod(CD_Gen, "ret", MTD_Gen_Obj),(smb, cob, sb) -> new RetHandler(smb, cob, sb,false)); smmap.put(new SpecialMethod(CD_Gen, "ret", MTD_Gen),(smb, cob, sb) -> new RetHandler(smb, cob, sb, true)); } - @Override - protected String uniqueName() { - return "Gen"+super.uniqueName(); - } - @Override protected void buildStateMachineMethod(ClassBuilder clb){ clb.withInterfaces(List.of(clb.constantPool().classEntry(CD_Gen)));