worked on fixed incorrect assumptions about how stack map entires function

This commit is contained in:
ParkerTenBroeck 2025-04-29 22:56:55 -04:00
parent f52827f97b
commit 0ad439c4d6
6 changed files with 57 additions and 49 deletions

View file

@ -72,50 +72,59 @@ public class Examples {
// return Gen.ret(); // return Gen.ret();
// } // }
public static Future<String> awaitTest2(int number){ // public static Future<String> awaitTest2(int number){
((Future<?>)new Delay(number)).await(); // ((Future<?>)new Delay(number)).await();
return Future.ret(number+"ms"); // return Future.ret(number+"ms");
} // }
//
//
// public Future<Integer> number(int value){
// Waker.waker().wake();
// Future.yield();
// return Future.ret(value);
// }
// public static Future<Void> 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<Integer> number(int value){ public static Future<Void> forever(Socket socket){
Waker.waker().wake();
Future.yield();
return Future.ret(value);
}
public Future<Void> 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<String> awaitTest(int number){
// var result = number(10).await()+number(20).await();
// Jokio.runtime().await().spawn(awaitTest2(5000));
var buffer = ByteBuffer.allocate(500); var buffer = ByteBuffer.allocate(500);
try(var socket = Socket.connect(new InetSocketAddress("45.79.112.203", 4242)).await()){ while(true){
send(buffer, socket).await(); // send(buffer, socket).await();
} catch (Exception e) { ((Future<?>)new Delay(1000 + buffer.get())).await();
throw new RuntimeException(e); System.out.println(socket);
}
return Future.ret("");
}
public Future<String> closing(int number){
try(var m = new Meow()){
var result = awaitTest2(number).await();
return Future.ret(result);
} }
} }
// public Future<String> 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<String> closing(int number){
// try(var m = new Meow()){
// var result = awaitTest2(number).await();
// return Future.ret(result);
// }
// }
public static class Meow implements AutoCloseable{ public static class Meow implements AutoCloseable{
{ {
System.out.println("OPen"); System.out.println("OPen");

View file

@ -57,7 +57,7 @@ public class Main implements Runnable {
} }
void await(){ void await(){
new Jokio().blocking(new Examples().awaitTest(2000)); new Jokio().blocking(Examples.forever(null));
} }

View file

@ -279,8 +279,8 @@ public class FrameTracker {
while(locals.size()<=slot)locals.add(null); while(locals.size()<=slot)locals.add(null);
var old = locals.get(slot); var old = locals.get(slot);
if(old == Type.DOUBLE_TYPE || old == Type.LONG_TYPE) if(old == Type.DOUBLE_TYPE || old == Type.LONG_TYPE)
locals.set(slot+1, Type.TOP_TYPE); locals.set(slot+1, Type.TOP_TYPE);
if(old == Type.DOUBLE2_TYPE || old == Type.LONG2_TYPE) if(old == Type.DOUBLE2_TYPE || old == Type.LONG2_TYPE)
locals.set(slot-1, Type.TOP_TYPE); locals.set(slot-1, Type.TOP_TYPE);
locals.set(slot, type); locals.set(slot, type);
@ -471,6 +471,7 @@ public class FrameTracker {
public void encounterLabel(Label l) { public void encounterLabel(Label l) {
var tmp = stackMapFrames.get(l); var tmp = stackMapFrames.get(l);
if (tmp != null) { if (tmp != null) {
// if(tmp.frameType()==252)
stack.clear(); stack.clear();
locals.clear(); locals.clear();
for( var sl : tmp.stack()) for( var sl : tmp.stack())

View file

@ -1,4 +0,0 @@
package generator.runtime;
public class SavedStateHelper {
}

View file

@ -25,7 +25,7 @@ public class SavedStateTracker {
} }
var s = new StackState(name, desc); var s = new StackState(name, desc);
saved.add(s); saved.addFirst(s);
return s; return s;
} }
@ -53,6 +53,6 @@ public class SavedStateTracker {
public void restore_all(StateMachineBuilder smb, CodeBuilder cob) { public void restore_all(StateMachineBuilder smb, CodeBuilder cob) {
while(!saved.isEmpty()) while(!saved.isEmpty())
restore(smb, cob, saved.getLast()); restore(smb, cob, saved.getFirst());
} }
} }

View file

@ -72,10 +72,12 @@ public abstract class StateMachineBuilder {
System.out.println("FRAME"); System.out.println("FRAME");
var lt = new FrameTracker(this, src_com); var lt = new FrameTracker(this, src_com);
int bco = 0;
for(var coe : src_com){ for(var coe : src_com){
if(coe instanceof Instruction) { if(coe instanceof Instruction i) {
frames.add(new Frame(lt.locals(), lt.stack())); 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); lt.encounter(coe);