use crate::diagnostics::span::Span;
use crate::sema::types::NeyukiType;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SymbolKind {
Variable,
Parameter,
Function,
}
#[derive(Clone, Debug)]
pub struct Symbol {
pub name: String,
pub kind: SymbolKind,
pub is_const: bool,
pub declared_type: Option<NeyukiType>,
pub inferred_type: NeyukiType,
pub span: Span,
pub used: bool,
pub assigned_count: usize,
pub num_params: Option<usize>,
pub min_params: Option<usize>,
pub is_vararg: bool,
}
impl Symbol {
pub fn new(
name: String,
kind: SymbolKind,
is_const: bool,
declared_type: Option<NeyukiType>,
span: Span,
) -> Self {
let inferred_type = declared_type.clone().unwrap_or(NeyukiType::Any);
Self {
name,
kind,
is_const,
declared_type,
inferred_type,
span,
used: false,
assigned_count: 0,
num_params: None,
min_params: None,
is_vararg: false,
}
}
}