precomputed frames, better local state saving

This commit is contained in:
Parker TenBroeck 2025-04-29 12:12:29 -04:00
parent b0d6737b07
commit 989c807aac
10 changed files with 355 additions and 176 deletions

View 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;
}
}