mirror of
https://github.com/ParkerTenBroeck/coroutines.git
synced 2026-06-06 21:00:35 -04:00
made state saver try to reuse previously defined fields
This commit is contained in:
parent
7fbe61a97c
commit
24ea55603e
3 changed files with 20 additions and 8 deletions
|
|
@ -18,7 +18,7 @@ public class AsyncExamples {
|
|||
Jokio.runtime().await().spawn(server());
|
||||
|
||||
|
||||
for(int i = 0; i < 200; i ++){
|
||||
for(int i = 0; i < 50; i ++){
|
||||
var builder = new StringBuilder();
|
||||
for(int c = 0; c < 4096*16*3; c ++)
|
||||
builder.append((char)((Math.random()*('z'-'a')+'a')));
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ public class Main implements Runnable {
|
|||
|
||||
@Override
|
||||
public void run() {
|
||||
await();
|
||||
// lexer();
|
||||
// await();
|
||||
lexer();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,16 +7,29 @@ import java.util.ArrayList;
|
|||
|
||||
public class SavedStateTracker {
|
||||
private final ArrayList<SavedState> saved = new ArrayList<>();
|
||||
public sealed interface SavedState{}
|
||||
public sealed interface SavedState{
|
||||
String name();
|
||||
}
|
||||
public record StackState(String name, ClassDesc desc) implements SavedState{
|
||||
|
||||
}
|
||||
public record LocalState(String name, ClassDesc desc, int slot) implements SavedState{
|
||||
|
||||
}
|
||||
public SavedState save_stack(StateMachineBuilder smb, CodeBuilder cob, ClassDesc desc){
|
||||
var name = "LSTATE_"+smb.lstate.size();
|
||||
|
||||
private String get_name(StateMachineBuilder smb, ClassDesc desc){
|
||||
var value = smb.lstate.stream() // find unused state
|
||||
.filter(v -> saved.stream().noneMatch(s -> s.name().equals(v.name())))
|
||||
.filter(v -> v.cd().equals(desc)).findFirst();
|
||||
if(value.isPresent())
|
||||
return value.get().name();
|
||||
var name = StateMachineBuilder.LOCAL_PREFIX+smb.lstate.size();
|
||||
smb.lstate.add(new StateMachineBuilder.LState(name, desc));
|
||||
return name;
|
||||
}
|
||||
|
||||
public SavedState save_stack(StateMachineBuilder smb, CodeBuilder cob, ClassDesc desc){
|
||||
var name = get_name(smb, desc);
|
||||
|
||||
if(TypeKind.from(desc).slotSize()==2){
|
||||
cob.aload(0).dup_x2().pop().putfield(smb.CD_this, name, desc);
|
||||
|
|
@ -30,8 +43,7 @@ public class SavedStateTracker {
|
|||
}
|
||||
|
||||
public SavedState save_local(StateMachineBuilder smb, CodeBuilder cob, ClassDesc desc, int slot){
|
||||
var name = "LSTATE_"+smb.lstate.size();
|
||||
smb.lstate.add(new StateMachineBuilder.LState(name, desc));
|
||||
var name = get_name(smb, desc);
|
||||
|
||||
cob.aload(0).loadLocal(TypeKind.from(desc), slot).putfield(smb.CD_this, name, desc);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue