use std::path::PathBuf;
use bitflags::bitflags;
use crate::models::meta::MetaType;
use crate::traits::Naming;
use super::IdentQuadruple;
#[derive(Debug)]
pub struct InterpreterConfig {
pub types: Vec<(IdentQuadruple, MetaType)>,
pub flags: InterpreterFlags,
pub debug_output: Option<PathBuf>,
pub naming: Option<Box<dyn Naming>>,
}
impl Default for InterpreterConfig {
fn default() -> Self {
Self {
types: vec![],
debug_output: None,
flags: InterpreterFlags::BUILDIN_TYPES
| InterpreterFlags::DEFAULT_TYPEDEFS
| InterpreterFlags::WITH_XS_ANY_TYPE,
naming: None,
}
}
}
impl Clone for InterpreterConfig {
fn clone(&self) -> Self {
Self {
types: self.types.clone(),
debug_output: self.debug_output.clone(),
flags: self.flags.clone(),
naming: self.naming.as_deref().map(Naming::clone_boxed),
}
}
}
bitflags! {
#[derive(Debug, Clone)]
pub struct InterpreterFlags: u32 {
const BUILDIN_TYPES = 1 << 0;
const DEFAULT_TYPEDEFS = 1 << 1;
const WITH_XS_ANY_TYPE = 1 << 2;
const WITH_NUM_BIG_INT = 1 << 3;
const NONZERO_TYPEDEFS = 1 << 4;
const WITH_XS_ANY_SIMPLE_TYPE = 1 << 5;
}
}