delete unused

This commit is contained in:
SimonFJ20 2024-08-28 21:49:04 +02:00
parent d6f2be49a5
commit 5d563527fd
2 changed files with 0 additions and 161 deletions

View File

@ -1,125 +0,0 @@
#![allow(unused_variables)]
use std::collections::HashMap;
use rand::random;
use crate::checked::Type;
#[derive(Clone, PartialEq, Debug)]
pub struct Sym {
pub id: u64,
pub uid: u64,
pub typ: Type,
}
#[derive(Debug)]
pub struct Syms {
tables: Vec<SymTable>,
current_id: usize,
}
impl Syms {
pub fn new() -> Self {
Self {
tables: vec![SymTable::new()],
current_id: 0,
}
}
pub fn enter_scope(&mut self) {
let new_id = self.tables.len();
self.tables.push(SymTable::from(self.current_id));
self.current_id = new_id;
}
pub fn leave_scope(&mut self) -> Result<(), ()> {
let parent = self.tables[self.current_id].parent.ok_or(())?;
self.current_id = parent;
Ok(())
}
pub fn get(&self, id: u64) -> Option<&Sym> {
self.get_rec(self.current_id, id)
}
fn get_rec(&self, table_id: usize, id: u64) -> Option<&Sym> {
if let Some(sym) = self.tables[table_id].get(id) {
return Some(sym);
}
if let Some(parent_id) = self.tables[table_id].parent {
return self.get_rec(parent_id, id);
};
None
}
pub fn defined_locally(&self, id: u64) -> bool {
self.tables[self.current_id].defined(id)
}
pub fn define(&mut self, id: u64, typ: Type) {
self.tables[self.current_id].define(id, typ);
}
pub fn table_id(&self) -> usize {
self.current_id
}
pub fn view(&self, table_id: usize) -> SymView {
SymView {
syms: self,
current_id: table_id,
}
}
}
pub struct SymView<'a> {
syms: &'a Syms,
current_id: usize,
}
impl<'a> SymView<'a> {
pub fn get(&self, id: u64) -> Option<&Sym> {
self.syms.get_rec(self.current_id, id)
}
}
#[derive(Debug)]
struct SymTable {
map: HashMap<u64, Sym>,
parent: Option<usize>,
}
impl SymTable {
pub fn new() -> Self {
Self {
map: HashMap::new(),
parent: None,
}
}
pub fn from(parent: usize) -> Self {
Self {
map: HashMap::new(),
parent: Some(parent),
}
}
pub fn defined(&self, id: u64) -> bool {
self.map.contains_key(&id)
}
pub fn get(&self, id: u64) -> Option<&Sym> {
self.map.get(&id)
}
pub fn define(&mut self, id: u64, typ: Type) {
self.map.insert(
id,
Sym {
id,
uid: random(),
typ,
},
);
}
}

View File

@ -1,36 +0,0 @@
use std::hash::{DefaultHasher, Hash, Hasher};
pub fn hash<H: Hash>(value: H) -> u64 {
let mut hasher = DefaultHasher::new();
value.hash(&mut hasher);
hasher.finish()
}
enum Duplicate<T: std::hash::Hash> {
None(std::collections::HashMap<T, T>),
Found(T),
}
pub trait Itertewls<T>
where
Self: Iterator<Item = T> + Sized,
{
fn find_first_duplicate(self) -> Option<T>;
}
impl<I, Item> Itertewls<Item> for I
where
I: Iterator<Item = Item> + Sized,
Item: std::cmp::PartialEq + Clone,
{
fn find_first_duplicate(mut self) -> Option<Item> {
self.try_fold(Vec::new(), |mut used, item| {
if used.contains(&item) {
Err(item)
} else {
used.push(item);
Ok(used)
}
})
.err()
}
}