namespace Age.Engine.Vm; public enum VmAddressSpace { Global, LocalInteger, LocalFloat, LocalString, } public readonly record struct VmAddress(VmAddressSpace Space, int Address) { public static VmAddress Global(int address) => new(VmAddressSpace.Global, address); public static VmAddress LocalInteger(int address) => new(VmAddressSpace.LocalInteger, address); public static VmAddress LocalFloat(int address) => new(VmAddressSpace.LocalFloat, address); public static VmAddress LocalString(int address) => new(VmAddressSpace.LocalString, address); public VmAddress Offset(long offset) => new(Space, checked(Address + (int)offset)); } public sealed class Frame { public Dictionary I = new(); // local-int public Dictionary F = new(); // local-float (raw) public Dictionary S = new(); // local-string public Dictionary P = new(); // local-ptr (retains local/global address domain) public Dictionary SP = new(); // local-string-ptr (same, for the string banks) }