use super::*;
pub struct CompiledScriptData {
pub(super) scripts: Vec<CompiledScript>,
pub(super) globals: Vec<CompiledGlobal>,
pub(super) files: Vec<CString>,
pub(super) warnings: Vec<CompileError>,
pub(super) nodes: Vec<CompiledNode>
}
impl CompiledScriptData {
pub fn get_scripts(&self) -> &[CompiledScript] {
&self.scripts
}
pub fn get_globals(&self) -> &[CompiledGlobal] {
&self.globals
}
pub fn get_files(&self) -> &[CString] {
&self.files
}
pub fn get_warnings(&self) -> &[CompileError] {
&self.warnings
}
pub fn get_nodes(&self) -> &[CompiledNode] {
&self.nodes
}
}
pub struct CompiledScriptParameter {
pub(super) name: CString,
pub(super) value_type: ValueType,
pub(super) file: usize,
pub(super) line: usize,
pub(super) column: usize
}
impl CompiledScriptParameter {
pub fn get_name(&self) -> &str {
self.name.to_str().unwrap()
}
pub fn get_name_cstr(&self) -> &CStr {
&self.name
}
pub fn get_value_type(&self) -> ValueType {
self.value_type
}
pub fn get_file(&self) -> usize {
self.file
}
pub fn get_line(&self) -> usize {
self.line
}
pub fn get_column(&self) -> usize {
self.column
}
}
pub struct CompiledScript {
pub(super) name: CString,
pub(super) value_type: ValueType,
pub(super) script_type: ScriptType,
pub(super) first_node: usize,
pub(super) parameters: Vec<CompiledScriptParameter>,
pub(super) file: usize,
pub(super) line: usize,
pub(super) column: usize
}
impl CompiledScript {
pub fn get_name(&self) -> &str {
self.name.to_str().unwrap()
}
pub fn get_name_cstr(&self) -> &CStr {
&self.name
}
pub fn get_value_type(&self) -> ValueType {
self.value_type
}
pub fn get_type(&self) -> ScriptType {
self.script_type
}
pub fn get_first_node_index(&self) -> usize {
self.first_node
}
pub fn get_file(&self) -> usize {
self.file
}
pub fn get_line(&self) -> usize {
self.line
}
pub fn get_column(&self) -> usize {
self.column
}
pub fn get_parameters(&self) -> &[CompiledScriptParameter] {
&self.parameters
}
}
pub struct CompiledGlobal {
pub(super) name: CString,
pub(super) value_type: ValueType,
pub(super) first_node: usize,
pub(super) file: usize,
pub(super) line: usize,
pub(super) column: usize
}
impl CompiledGlobal {
pub fn get_name(&self) -> &str {
self.name.to_str().unwrap()
}
pub fn get_name_cstr(&self) -> &CStr {
&self.name
}
pub fn get_value_type(&self) -> ValueType {
self.value_type
}
pub fn get_first_node_index(&self) -> usize {
self.first_node
}
pub fn get_file(&self) -> usize {
self.file
}
pub fn get_line(&self) -> usize {
self.line
}
pub fn get_column(&self) -> usize {
self.column
}
}
pub struct CompiledNode {
pub(super) node_type: NodeType,
pub(super) value_type: ValueType,
pub(super) data: Option<NodeData>,
pub(super) string_data: Option<CString>,
pub(super) next_node: Option<usize>,
pub(super) index: Option<u16>,
pub(super) file: usize,
pub(super) line: usize,
pub(super) column: usize
}
impl CompiledNode {
pub fn get_type(&self) -> NodeType {
self.node_type
}
pub fn get_value_type(&self) -> ValueType {
self.value_type
}
pub fn get_data(&self) -> Option<NodeData> {
self.data
}
pub fn get_string_data(&self) -> Option<&str> {
match self.string_data.as_ref() {
Some(n) => Some(n.to_str().unwrap()),
None => None
}
}
pub fn get_string_data_cstr(&self) -> Option<&CStr> {
match self.string_data.as_ref() {
Some(n) => Some(n),
None => None
}
}
pub fn get_next_node_index(&self) -> Option<usize> {
self.next_node
}
pub fn get_index(&self) -> Option<u16> {
self.index
}
pub fn get_file(&self) -> usize {
self.file
}
pub fn get_line(&self) -> usize {
self.line
}
pub fn get_column(&self) -> usize {
self.column
}
}
#[derive(PartialEq, Clone, Debug, Default)]
pub(crate) struct Node {
pub value_type: ValueType,
pub node_type: NodeType,
pub string_data: Option<String>,
pub data: Option<NodeData>,
pub index: Option<u16>,
pub parameters: Option<Vec<Node>>,
pub file: usize,
pub line: usize,
pub column: usize
}