From 0ad439c4d65e5a2c4ff754918d12551e86e5b09f Mon Sep 17 00:00:00 2001 From: ParkerTenBroeck <51721964+ParkerTenBroeck@users.noreply.github.com> Date: Tue, 29 Apr 2025 22:56:55 -0400 Subject: [PATCH] worked on fixed incorrect assumptions about how stack map entires function --- src/Examples.java | 85 ++++++++++--------- src/Main.java | 2 +- src/generator/runtime/FrameTracker.java | 5 +- src/generator/runtime/SavedStateHelper.java | 4 - src/generator/runtime/SavedStateTracker.java | 4 +- .../runtime/StateMachineBuilder.java | 6 +- 6 files changed, 57 insertions(+), 49 deletions(-) delete mode 100644 src/generator/runtime/SavedStateHelper.java diff --git a/src/Examples.java b/src/Examples.java index 2608754..0355961 100644 --- a/src/Examples.java +++ b/src/Examples.java @@ -72,50 +72,59 @@ public class Examples { // return Gen.ret(); // } - public static Future awaitTest2(int number){ - ((Future)new Delay(number)).await(); - return Future.ret(number+"ms"); - } +// public static Future awaitTest2(int number){ +// ((Future)new Delay(number)).await(); +// return Future.ret(number+"ms"); +// } +// +// +// public Future number(int value){ +// Waker.waker().wake(); +// Future.yield(); +// return Future.ret(value); +// } +// public static Future send(ByteBuffer buffer, Socket socket){ +// String message = "hello world!\n"; +// buffer.limit(message.length()).put(message.getBytes(StandardCharsets.UTF_8)).position(0); +// var wrote = socket.write_all(buffer).await(); +// buffer.clear().limit(wrote); +// var read = socket.read_all(buffer).await(); +// System.out.println(new String(buffer.array(), 0, read)); +// +// return Future.ret(null); +// } - public Future number(int value){ - Waker.waker().wake(); - Future.yield(); - return Future.ret(value); - } - - public Future send(ByteBuffer buffer, Socket socket){ - String message = "hello world!\n"; - buffer.limit(message.length()).put(message.getBytes(StandardCharsets.UTF_8)).position(0); - var wrote = socket.write_all(buffer).await(); - buffer.clear().limit(wrote); - var read = socket.read_all(buffer).await(); - System.out.println(new String(buffer.array(), 0, read)); - - return Future.ret(null); - } - - public Future awaitTest(int number){ -// var result = number(10).await()+number(20).await(); -// Jokio.runtime().await().spawn(awaitTest2(5000)); - + public static Future forever(Socket socket){ var buffer = ByteBuffer.allocate(500); - try(var socket = Socket.connect(new InetSocketAddress("45.79.112.203", 4242)).await()){ - send(buffer, socket).await(); - } catch (Exception e) { - throw new RuntimeException(e); - } - - return Future.ret(""); - } - - public Future closing(int number){ - try(var m = new Meow()){ - var result = awaitTest2(number).await(); - return Future.ret(result); + while(true){ +// send(buffer, socket).await(); + ((Future)new Delay(1000 + buffer.get())).await(); + System.out.println(socket); } } +// public Future awaitTest(int number){ +//// var result = number(10).await()+number(20).await(); +//// Jokio.runtime().await().spawn(awaitTest2(5000)); +// +// try(var socket = Socket.connect(new InetSocketAddress("45.79.112.203", 4242)).await()){ +// forever(socket).await(); +// } catch (Exception e) { +// e.printStackTrace(); +//// throw new RuntimeException(e); +// } +// +// return Future.ret(""); +// } + +// public Future closing(int number){ +// try(var m = new Meow()){ +// var result = awaitTest2(number).await(); +// return Future.ret(result); +// } +// } + public static class Meow implements AutoCloseable{ { System.out.println("OPen"); diff --git a/src/Main.java b/src/Main.java index 5efe763..77889e8 100644 --- a/src/Main.java +++ b/src/Main.java @@ -57,7 +57,7 @@ public class Main implements Runnable { } void await(){ - new Jokio().blocking(new Examples().awaitTest(2000)); + new Jokio().blocking(Examples.forever(null)); } diff --git a/src/generator/runtime/FrameTracker.java b/src/generator/runtime/FrameTracker.java index aab666d..67d7fd8 100644 --- a/src/generator/runtime/FrameTracker.java +++ b/src/generator/runtime/FrameTracker.java @@ -279,8 +279,8 @@ public class FrameTracker { while(locals.size()<=slot)locals.add(null); var old = locals.get(slot); - if(old == Type.DOUBLE_TYPE || old == Type.LONG_TYPE) - locals.set(slot+1, Type.TOP_TYPE); + if(old == Type.DOUBLE_TYPE || old == Type.LONG_TYPE) + locals.set(slot+1, Type.TOP_TYPE); if(old == Type.DOUBLE2_TYPE || old == Type.LONG2_TYPE) locals.set(slot-1, Type.TOP_TYPE); locals.set(slot, type); @@ -471,6 +471,7 @@ public class FrameTracker { public void encounterLabel(Label l) { var tmp = stackMapFrames.get(l); if (tmp != null) { +// if(tmp.frameType()==252) stack.clear(); locals.clear(); for( var sl : tmp.stack()) diff --git a/src/generator/runtime/SavedStateHelper.java b/src/generator/runtime/SavedStateHelper.java deleted file mode 100644 index 218b6dc..0000000 --- a/src/generator/runtime/SavedStateHelper.java +++ /dev/null @@ -1,4 +0,0 @@ -package generator.runtime; - -public class SavedStateHelper { -} diff --git a/src/generator/runtime/SavedStateTracker.java b/src/generator/runtime/SavedStateTracker.java index 83472eb..0887eaa 100644 --- a/src/generator/runtime/SavedStateTracker.java +++ b/src/generator/runtime/SavedStateTracker.java @@ -25,7 +25,7 @@ public class SavedStateTracker { } var s = new StackState(name, desc); - saved.add(s); + saved.addFirst(s); return s; } @@ -53,6 +53,6 @@ public class SavedStateTracker { public void restore_all(StateMachineBuilder smb, CodeBuilder cob) { while(!saved.isEmpty()) - restore(smb, cob, saved.getLast()); + restore(smb, cob, saved.getFirst()); } } diff --git a/src/generator/runtime/StateMachineBuilder.java b/src/generator/runtime/StateMachineBuilder.java index db6bf94..556dabf 100644 --- a/src/generator/runtime/StateMachineBuilder.java +++ b/src/generator/runtime/StateMachineBuilder.java @@ -72,10 +72,12 @@ public abstract class StateMachineBuilder { System.out.println("FRAME"); var lt = new FrameTracker(this, src_com); + int bco = 0; for(var coe : src_com){ - if(coe instanceof Instruction) { + if(coe instanceof Instruction i) { frames.add(new Frame(lt.locals(), lt.stack())); - System.out.println(frames.getLast() + " " + coe); + System.out.println(bco + " " + frames.getLast() + " " + coe); + bco += i.sizeInBytes(); } lt.encounter(coe);