use super::common::*;
use super::function::{DwarfDirective, FunctionKernelDirective};
use super::variable::ModuleVariableDirective;
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Module {
pub directives: Vec<ModuleDirective>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ModuleDirective {
ModuleVariable(ModuleVariableDirective),
FunctionKernel(FunctionKernelDirective),
ModuleInfo(ModuleInfoDirectiveKind),
Debug(ModuleDebugDirective),
Linking(LinkingDirective),
}
#[derive(Debug, Clone, PartialEq)]
pub enum ModuleInfoDirectiveKind {
Version(VersionDirective),
Target(TargetDirective),
AddressSize(AddressSizeDirective),
}
#[derive(Debug, Clone, PartialEq)]
pub struct VersionDirective {
pub major: u32,
pub minor: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TargetDirective {
pub entries: Vec<String>,
pub raw: String,
}
#[derive(Debug, Clone, PartialEq)]
pub struct AddressSizeDirective {
pub size: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ModuleDebugDirective {
File(FileDirective),
Section(SectionDirective),
Dwarf(DwarfDirective),
}
#[derive(Debug, Clone, PartialEq)]
pub struct FileDirective {
pub index: u32,
pub path: String,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SectionDirective {
pub name: String,
pub attributes: Vec<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct LinkingDirective {
pub kind: CodeOrDataLinkage,
pub prototype: String,
pub raw: String,
}