namespace WhiteMagic.Assembly;
///
/// The default backend. Hand-emits calling-convention
/// trampolines and injection stubs using deterministic byte emitters
/// (, , ). Has
/// no native or third-party dependency — no FASM, no Iced.
///
///
/// is not supported by this backend (it is a parse-free
/// emitter, not a text assembler). Use (Phase 8) for
/// arbitrary mnemonics.
///
public class StubAssembler : IAssembler
{
///
/// Always thrown. StubAssembler does
/// not parse text assembly; use IcedAssembler for that.
public byte[] Assemble(string assemblyText, ulong origin = 0)
{
throw new NotSupportedException(
"StubAssembler does not parse text assembly. " +
"Use IcedAssembler (Phase 8) for arbitrary mnemonics.");
}
// ── Emit primitives ────────────────────────────────────────────────────
/// Appends a single byte to .
public void EmitU8(List buffer, byte value)
{
buffer.Add(value);
}
/// Appends as 4 little-endian bytes.
public void EmitU32(List buffer, uint value)
{
buffer.Add((byte)value);
buffer.Add((byte)(value >> 8));
buffer.Add((byte)(value >> 16));
buffer.Add((byte)(value >> 24));
}
/// Appends as 8 little-endian bytes.
public void EmitU64(List buffer, ulong value)
{
EmitU32(buffer, (uint)value);
EmitU32(buffer, (uint)(value >> 32));
}
}