mirror of
https://github.com/ParkerTenBroeck/coroutines.git
synced 2026-06-07 05:08:51 -04:00
fixed bug with saving stack
This commit is contained in:
parent
989c807aac
commit
90bfb8a631
5 changed files with 59 additions and 13 deletions
|
|
@ -11,8 +11,7 @@ public record Frame(FrameTracker.Type[] locals, FrameTracker.Type[] stack) {
|
|||
return "Frame[l =" + Arrays.toString(locals) + ", s = " + Arrays.toString(stack) + "]";
|
||||
}
|
||||
|
||||
public SavedStateTracker save(StateMachineBuilder smb, CodeBuilder cob, int loc_off, int stack_off) {
|
||||
var sst = new SavedStateTracker();
|
||||
public void save_locals(StateMachineBuilder smb, CodeBuilder cob, SavedStateTracker sst, int loc_off){
|
||||
int slot = 0;
|
||||
for (var entry : locals) {
|
||||
slot++;
|
||||
|
|
@ -21,7 +20,22 @@ public record Frame(FrameTracker.Type[] locals, FrameTracker.Type[] stack) {
|
|||
|
||||
sst.save_local(smb, cob, entry.toCD(), slot - smb.paramSlotOff + loc_off - 1);
|
||||
}
|
||||
}
|
||||
public void save_stack(StateMachineBuilder smb, CodeBuilder cob, SavedStateTracker sst, int stack_off) {
|
||||
for(int i = stack.length-1-stack_off; i >= 0; i --){
|
||||
if(stack[i].isCategory2_2nd())continue;
|
||||
sst.save_stack(smb, cob, stack[i].toCD());
|
||||
}
|
||||
}
|
||||
|
||||
public SavedStateTracker save(StateMachineBuilder smb, CodeBuilder cob, SavedStateTracker sst, int loc_off, int stack_off) {
|
||||
save_locals(smb, cob, sst, loc_off);
|
||||
save_stack(smb, cob, sst, stack_off);
|
||||
return sst;
|
||||
}
|
||||
|
||||
public SavedStateTracker save(StateMachineBuilder smb, CodeBuilder cob, int loc_off, int stack_off) {
|
||||
var sst = new SavedStateTracker();
|
||||
return save(smb, cob, sst, loc_off, stack_off);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue