mirror of
https://github.com/ParkerTenBroeck/coroutines.git
synced 2026-06-07 05:08:51 -04:00
precomputed frames, better local state saving
This commit is contained in:
parent
b0d6737b07
commit
989c807aac
10 changed files with 355 additions and 176 deletions
27
src/generator/runtime/Frame.java
Normal file
27
src/generator/runtime/Frame.java
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
package generator.runtime;
|
||||
|
||||
import java.lang.classfile.CodeBuilder;
|
||||
import java.lang.classfile.TypeKind;
|
||||
import java.util.Arrays;
|
||||
|
||||
public record Frame(FrameTracker.Type[] locals, FrameTracker.Type[] stack) {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
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();
|
||||
int slot = 0;
|
||||
for (var entry : locals) {
|
||||
slot++;
|
||||
if (slot <= loc_off) continue;
|
||||
if (entry.isCategory2_2nd()) continue;
|
||||
|
||||
sst.save_local(smb, cob, entry.toCD(), slot - smb.paramSlotOff + loc_off - 1);
|
||||
}
|
||||
|
||||
return sst;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue