use strum::{EnumDiscriminants, FromRepr};
#[repr(u8)]
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash, EnumDiscriminants)]
#[strum_discriminants(name(InstructionKind))]
#[strum_discriminants(derive(FromRepr))]
#[non_exhaustive]
pub enum Instruction {
#[default]
Nop,
Ldar(u16),
Sba,
Clř,
Dumpř(u16),
Movař(u8),
Setř(u8, u16),
Setiř(u8, i8),
Ldř(u16),
Ldiř([i8; 37]),
Clß,
Dumpß(u16),
Writeß(u16, u8),
Movaß(u8),
Setß(u16, u8),
Setiß(u8, u8),
Ldß(u16),
Pushß,
Popß,
Lenßa,
Ldidp(u16),
ΩChoiceSet(Option<Option<Option<Option<()>>>>),
ΩChoiceGetA,
ΩGainAPolymorphicDesires,
ΩLoseAPolymorphicDesires,
ΩPushPolymorphicDesires,
ΩTheEndIsNear,
ΩSkipToTheChase,
ΩSetSentience(bool),
ΩSetPaperclipProduction(bool),
AddBL,
SubBL,
MulBL,
DivBL,
ModBL,
NotL,
AndBL,
OrBL,
XorBL,
CmpLB,
TgFlag,
ClFlag,
AddF(u16),
SubF(u16),
MulF(u16),
DivF(u16),
ModF(u16),
StackAlloc(u16),
StackDealloc(u16),
Push(u16),
Pushi(u8),
Pop(u16),
Popa,
Pusha,
Popb,
Pushb,
PopL,
PushL,
Popf,
Pushf,
Popch,
Pushch,
Popnum,
Pushnum,
Popep,
Zpopep,
Ppopep,
Npopep,
Fpopep,
Zapopep,
Dpopep,
GetChar,
GetLine,
WriteChar,
WriteLineß,
WriteLine(u16),
ToggleDebug,
DebugMachineState,
DebugMachineStateCompact,
DebugMemoryRegion(u16, u16),
DebugStackRegion(u16, u16),
ShowChoice,
}
#[allow(clippy::module_name_repetitions)]
pub enum DataOrInstruction<'a> {
ByteData(u8),
Data(&'a [u8]),
Instruction(Instruction),
}