Files
OpenMaidEngine/engine/Age.Engine/Vm/Frame.cs
2026-07-19 10:43:52 -04:00

28 lines
1.1 KiB
C#

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<int, long> I = new(); // local-int
public Dictionary<int, long> F = new(); // local-float (raw)
public Dictionary<int, string> S = new(); // local-string
public Dictionary<int, VmAddress> P = new(); // local-ptr (retains local/global address domain)
public Dictionary<int, VmAddress> SP = new(); // local-string-ptr (same, for the string banks)
}