use std::borrow::Cow;
use std::num::NonZeroU32;
#[derive(Clone, PartialEq, Eq, Hash, Debug)]
pub enum Token<'src> {
Eof,
DotDotDot,
Equal,
Comma,
Star,
LSquare,
RSquare,
LBrace,
RBrace,
Less,
Greater,
LParen,
RParen,
Exclaim,
Bar,
Colon,
Hash,
LabelStr(Cow<'src, [u8]>),
GlobalVar(Cow<'src, [u8]>),
GlobalId(u32),
LocalVar(Cow<'src, [u8]>),
LocalVarId(u32),
ComdatVar(Cow<'src, [u8]>),
MetadataVar(Cow<'src, [u8]>),
StringConstant(Cow<'src, [u8]>),
AttrGrpId(u32),
SummaryId(u32),
DwarfTag(&'src str),
DwarfAttEncoding(&'src str),
DwarfVirtuality(&'src str),
DwarfLang(&'src str),
DwarfSourceLangName(&'src str),
DwarfCC(&'src str),
DwarfOp(&'src str),
DwarfMacinfo(&'src str),
DwarfEnumKind(&'src str),
DiFlag(&'src str),
DiSpFlag(&'src str),
ChecksumKind(&'src str),
EmissionKind(&'src str),
NameTableKind(&'src str),
FixedPointKind(&'src str),
SpecializedMetadata(&'src str),
DbgRecordType(&'src str),
PrimitiveType(PrimitiveTy),
IntegerLit(IntLit<'src>),
FloatLit(FpLit<'src>),
Instruction(Opcode),
Kw(Keyword),
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum PrimitiveTy {
Void,
Label,
Metadata,
Token,
X86Amx,
Half,
BFloat,
Float,
Double,
X86Fp80,
Fp128,
PpcFp128,
Ptr,
Integer(NonZeroU32),
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum Sign {
Pos,
Neg,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum NumBase {
Dec,
HexSigned,
HexUnsigned,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub struct IntLit<'src> {
pub sign: Sign,
pub base: NumBase,
pub digits: &'src str,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum FpLit<'src> {
Decimal(&'src str),
HexDouble(&'src str),
HexX87(&'src str),
HexQuad(&'src str),
HexPpc128(&'src str),
HexHalf(&'src str),
HexBFloat(&'src str),
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum HexFpKind {
Half,
BFloat,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum QuotedNameKind {
Global,
Local,
Comdat,
String,
Metadata,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum Opcode {
FNeg,
Add,
Sub,
Mul,
UDiv,
SDiv,
URem,
SRem,
Shl,
LShr,
AShr,
And,
Or,
Xor,
FAdd,
FSub,
FMul,
FDiv,
FRem,
ICmp,
FCmp,
Trunc,
ZExt,
SExt,
FPTrunc,
FPExt,
UIToFP,
SIToFP,
FPToUI,
FPToSI,
IntToPtr,
PtrToAddr,
PtrToInt,
BitCast,
AddrSpaceCast,
Phi,
Call,
Select,
VAArg,
LandingPad,
Ret,
Br,
Switch,
IndirectBr,
Invoke,
Resume,
Unreachable,
CleanupRet,
CatchRet,
CatchSwitch,
CatchPad,
CleanupPad,
CallBr,
Alloca,
Load,
Store,
AtomicCmpXchg,
AtomicRMW,
Fence,
GetElementPtr,
ExtractElement,
InsertElement,
ShuffleVector,
ExtractValue,
InsertValue,
Freeze,
}
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
pub enum Keyword {
True,
False,
Declare,
Define,
Global,
Constant,
DsoLocal,
DsoPreemptable,
Private,
Internal,
AvailableExternally,
Linkonce,
LinkonceOdr,
Weak,
WeakOdr,
Appending,
Dllimport,
Dllexport,
Common,
Default,
Hidden,
Protected,
UnnamedAddr,
LocalUnnamedAddr,
ExternallyInitialized,
ExternWeak,
External,
ThreadLocal,
Localdynamic,
Initialexec,
Localexec,
Zeroinitializer,
Undef,
Null,
None,
Poison,
To,
Caller,
Within,
From,
Tail,
Musttail,
Notail,
Target,
Triple,
SourceFilename,
Unwind,
Datalayout,
Volatile,
Atomic,
Unordered,
Monotonic,
Acquire,
Release,
AcqRel,
SeqCst,
Syncscope,
Nnan,
Ninf,
Nsz,
Arcp,
Contract,
Reassoc,
Afn,
Fast,
Nuw,
Nsw,
Nusw,
Exact,
Disjoint,
Inbounds,
Nneg,
Samesign,
Inrange,
Addrspace,
Section,
Partition,
CodeModel,
Alias,
Ifunc,
Module,
Asm,
Sideeffect,
Inteldialect,
Gc,
Prefix,
Prologue,
NoSanitizeAddress,
NoSanitizeHwaddress,
SanitizeAddressDyninit,
Ccc,
Fastcc,
Coldcc,
CfguardCheckcc,
X86Stdcallcc,
X86Fastcallcc,
X86Thiscallcc,
X86Vectorcallcc,
ArmApcscc,
ArmAapcscc,
ArmAapcsVfpcc,
Aarch64VectorPcs,
Aarch64SveVectorPcs,
Aarch64SmePreservemostFromX0,
Aarch64SmePreservemostFromX1,
Aarch64SmePreservemostFromX2,
Msp430Intrcc,
AvrIntrcc,
AvrSignalcc,
PtxKernel,
PtxDevice,
SpirKernel,
SpirFunc,
IntelOclBicc,
X86_64Sysvcc,
Win64cc,
X86Regcallcc,
Swiftcc,
Swifttailcc,
Anyregcc,
PreserveMostcc,
PreserveAllcc,
PreserveNonecc,
Ghccc,
X86Intrcc,
Hhvmcc,
HhvmCcc,
CxxFastTlscc,
AmdgpuVs,
AmdgpuLs,
AmdgpuHs,
AmdgpuEs,
AmdgpuGs,
AmdgpuPs,
AmdgpuCs,
AmdgpuCsChain,
AmdgpuCsChainPreserve,
AmdgpuKernel,
AmdgpuGfx,
AmdgpuGfxWholeWave,
Tailcc,
M68kRtdcc,
Graalcc,
RiscvVectorCc,
RiscvVlsCc,
CheriotCompartmentcallcc,
CheriotCompartmentcalleecc,
CheriotLibrarycallcc,
Cc,
C,
Attributes,
Sync,
Async,
Align,
Alignstack,
Allocalign,
Allockind,
Allocptr,
Allocsize,
Alwaysinline,
Builtin,
Byref,
Byval,
Captures,
Cold,
Convergent,
CoroElideSafe,
CoroOnlyDestroyWhenComplete,
DeadOnReturn,
DeadOnUnwind,
Dereferenceable,
DereferenceableOrNull,
DisableSanitizerInstrumentation,
Elementtype,
FnRetThunkExtern,
Hot,
HybridPatchable,
Immarg,
Inalloca,
Initializes,
Inlinehint,
Inreg,
Jumptable,
Memory,
Minsize,
Mustprogress,
Naked,
Nest,
Noalias,
Nobuiltin,
Nocallback,
NocfCheck,
Nocreateundeforpoison,
Nodivergencesource,
Noduplicate,
Noext,
Nofpclass,
Nofree,
Noimplicitfloat,
Noinline,
Nomerge,
Nonlazybind,
Nonnull,
Noprofile,
Norecurse,
Noredzone,
Noreturn,
NosanitizeBounds,
NosanitizeCoverage,
Nosync,
Noundef,
Nounwind,
NullPointerIsValid,
Optdebug,
Optforfuzzing,
Optnone,
Optsize,
Preallocated,
Presplitcoroutine,
Range,
Readnone,
Readonly,
Returned,
ReturnsTwice,
Safestack,
SanitizeAddress,
SanitizeAllocToken,
SanitizeHwaddress,
SanitizeMemory,
SanitizeMemtag,
SanitizeNumericalStability,
SanitizeRealtime,
SanitizeRealtimeBlocking,
SanitizeThread,
SanitizeType,
Shadowcallstack,
Signext,
Skipprofile,
Speculatable,
SpeculativeLoadHardening,
Sret,
Ssp,
Sspreq,
Sspstrong,
Strictfp,
Swiftasync,
Swifterror,
Swiftself,
Uwtable,
VscaleRange,
Willreturn,
Writable,
Writeonly,
Zeroext,
Read,
Write,
Readwrite,
Argmem,
TargetMem0,
TargetMem1,
Inaccessiblemem,
Errnomem,
Argmemonly,
Inaccessiblememonly,
InaccessiblememOrArgmemonly,
Nocapture,
Address,
AddressIsNull,
Provenance,
ReadProvenance,
All,
Nan,
Snan,
Qnan,
Inf,
Pinf,
Norm,
Nnorm,
Pnorm,
Nsub,
Psub,
Zero,
Nzero,
Pzero,
Type,
Opaque,
Comdat,
Any,
Exactmatch,
Largest,
Nodeduplicate,
Samesize,
Eq,
Ne,
Slt,
Sgt,
Sle,
Sge,
Ult,
Ugt,
Ule,
Uge,
Oeq,
One,
Olt,
Ogt,
Ole,
Oge,
Ord,
Uno,
Ueq,
Une,
Xchg,
Nand,
Max,
Min,
Umax,
Umin,
Fmax,
Fmin,
Fmaximum,
Fminimum,
UincWrap,
UdecWrap,
UsubCond,
UsubSat,
Splat,
Vscale,
X,
Blockaddress,
DsoLocalEquivalent,
NoCfi,
Ptrauth,
Distinct,
Uselistorder,
UselistorderBb,
Personality,
Cleanup,
Catch,
Filter,
Path,
Hash_, Gv,
Guid,
Name,
Summaries,
Flags,
Blockcount,
Linkage,
Visibility,
NotEligibleToImport,
Live,
DsoLocal_,
CanAutoHide,
ImportType,
Definition,
Declaration,
Function,
Insts,
FuncFlags,
ReadNone,
ReadOnly,
NoRecurse,
ReturnDoesNotAlias,
NoInline,
AlwaysInline,
NoUnwind,
MayThrow,
HasUnknownCall,
MustBeUnreachable,
Calls,
Callee,
Params,
Param,
Hotness,
Unknown,
Critical,
Relbf,
Variable,
VTableFuncs,
VirtFunc,
Aliasee,
Refs,
TypeIdInfo,
TypeTests,
TypeTestAssumeVCalls,
TypeCheckedLoadVCalls,
TypeTestAssumeConstVCalls,
TypeCheckedLoadConstVCalls,
VFuncId,
Offset,
Args,
Typeid,
TypeidCompatibleVTable,
Summary,
TypeTestRes,
Kind,
Unsat,
ByteArray,
Inline,
Single,
AllOnes,
SizeM1BitWidth,
AlignLog2,
SizeM1,
BitMask,
InlineBits,
VcallVisibility,
WpdResolutions,
WpdRes,
Indir,
SingleImpl,
BranchFunnel,
SingleImplName,
ResByArg,
ByArg,
UniformRetVal,
UniqueRetVal,
VirtualConstProp,
Info,
Byte,
Bit,
VarFlags,
Callsites,
Clones,
StackIds,
Allocs,
Versions,
MemProf,
Notcold,
}