mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 10:49:54 +00:00
chore: eliminate unsafe
operations
This commit is contained in:
parent
7049faf144
commit
8e481399b4
17 changed files with 196 additions and 118 deletions
|
@ -1,3 +1,4 @@
|
|||
use std::cell::Ref;
|
||||
use std::collections::hash_map::{Iter, Keys, Values};
|
||||
use std::fmt;
|
||||
use std::path::Path;
|
||||
|
@ -9,6 +10,22 @@ use erg_common::shared::Shared;
|
|||
|
||||
use crate::varinfo::{AbsLocation, VarInfo};
|
||||
|
||||
pub struct Members<'a>(Ref<'a, Dict<AbsLocation, ModuleIndexValue>>);
|
||||
|
||||
impl<'a> Members<'a> {
|
||||
pub fn iter(&self) -> Iter<AbsLocation, ModuleIndexValue> {
|
||||
self.0.iter()
|
||||
}
|
||||
|
||||
pub fn keys(&self) -> Keys<AbsLocation, ModuleIndexValue> {
|
||||
self.0.keys()
|
||||
}
|
||||
|
||||
pub fn values(&self) -> Values<AbsLocation, ModuleIndexValue> {
|
||||
self.0.values()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct ModuleIndexValue {
|
||||
pub vi: VarInfo,
|
||||
|
@ -101,20 +118,18 @@ impl SharedModuleIndex {
|
|||
self.0.borrow_mut().register(vi);
|
||||
}
|
||||
|
||||
pub fn get_refs(&self, referee: &AbsLocation) -> Option<&ModuleIndexValue> {
|
||||
unsafe { self.0.as_ptr().as_ref().unwrap().get_refs(referee) }
|
||||
pub fn get_refs(&self, referee: &AbsLocation) -> Option<Ref<ModuleIndexValue>> {
|
||||
if self.0.borrow().get_refs(referee).is_some() {
|
||||
Some(Ref::map(self.0.borrow(), |index| {
|
||||
index.get_refs(referee).unwrap()
|
||||
}))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn referees(&self) -> Keys<AbsLocation, ModuleIndexValue> {
|
||||
unsafe { self.0.as_ptr().as_ref().unwrap().members.keys() }
|
||||
}
|
||||
|
||||
pub fn referrers(&self) -> Values<AbsLocation, ModuleIndexValue> {
|
||||
unsafe { self.0.as_ptr().as_ref().unwrap().members.values() }
|
||||
}
|
||||
|
||||
pub fn iter(&self) -> Iter<AbsLocation, ModuleIndexValue> {
|
||||
unsafe { self.0.as_ptr().as_ref().unwrap().members.iter() }
|
||||
pub fn members(&self) -> Members {
|
||||
Members(Ref::map(self.0.borrow(), |mi| &mi.members))
|
||||
}
|
||||
|
||||
pub fn initialize(&self) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue