zoisite 0.1.0

Zoisite is a programming language designed specifically for competitive programming.
Documentation
use std::collections::HashMap;

use ecow::EcoString;

use crate::resolve_context::Place;

pub struct Scope {
    variables: HashMap<EcoString, VarId>,
    functions: HashMap<(EcoString, usize), FnId>,
    pub place: Place,
}

impl Scope {
    pub fn new(place: Place) -> Self {
        Scope {
            variables: HashMap::new(),
            functions: HashMap::new(),
            place,
        }
    }
    pub fn define_var(&mut self, name: EcoString, var_id: VarId) {
        self.variables.insert(name, var_id);
    }
    pub fn define_fn(&mut self, name: EcoString, num_params: usize, fn_id: FnId) {
        self.functions.insert((name, num_params), fn_id);
    }
    pub fn resolve_var(&self, name: &EcoString) -> Option<VarId> {
        self.variables.get(name).copied()
    }
    pub fn resolve_fn(&self, name: &EcoString, num_params: usize) -> Option<FnId> {
        self.functions.get(&(name.clone(), num_params)).copied()
    }
}

#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
pub struct VarId(pub usize);

#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
pub struct FnId(pub usize);