73 lines
926 B
C#
73 lines
926 B
C#
using System.Collections.Generic;
|
|
|
|
namespace GMAssetCompiler
|
|
{
|
|
public class VMLabel
|
|
{
|
|
public VMBuffer VMB
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public string Label
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public long Address
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public List<int> Patches
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public bool Marked
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public int BreakCount
|
|
{
|
|
get;
|
|
set;
|
|
}
|
|
|
|
public VMLabel(string _label, VMBuffer _vmb)
|
|
{
|
|
Label = _label;
|
|
Address = 0L;
|
|
Patches = new List<int>();
|
|
Marked = false;
|
|
BreakCount = 0;
|
|
VMB = _vmb;
|
|
}
|
|
|
|
public void Mark(long _address)
|
|
{
|
|
Address = _address;
|
|
Marked = true;
|
|
Patch();
|
|
}
|
|
|
|
public void Patch()
|
|
{
|
|
foreach (int patch in Patches)
|
|
{
|
|
long address = Address;
|
|
int @int = VMB.GetInt(patch);
|
|
int value = VMBuffer.EncodeInstructionBranch(VMBuffer.GetInstruction(@int), patch);
|
|
VMB.SetInt(patch, value);
|
|
}
|
|
Patches.Clear();
|
|
}
|
|
}
|
|
}
|