diff --git a/stack-core/src/chain.rs b/stack-core/src/chain.rs index b4c15cfc..2ee8823a 100644 --- a/stack-core/src/chain.rs +++ b/stack-core/src/chain.rs @@ -1,24 +1,24 @@ use core::cell::RefCell; -use std::{borrow::BorrowMut, rc::Rc}; +use std::{borrow::BorrowMut, sync::Arc}; #[derive(Debug, PartialEq, Clone)] pub struct Chain { - value: Rc>, - child: Option>>>, + value: Arc>, + child: Option>>>, root: bool, } impl Chain { pub fn new(value: T) -> Self { Self { - value: Rc::new(RefCell::new(value)), + value: Arc::new(RefCell::new(value)), child: None, root: true, } } - pub fn link(&mut self) -> Rc> { - let child = Rc::new(RefCell::new(Self { + pub fn link(&mut self) -> Arc> { + let child = Arc::new(RefCell::new(Self { value: self.value.clone(), child: None, root: false, @@ -28,7 +28,7 @@ impl Chain { child } - pub fn root(&self) -> Rc> { + pub fn root(&self) -> Arc> { self.value.clone() } @@ -45,7 +45,7 @@ where self.value.borrow().clone() } - fn unlink_with_rc(&mut self, value: Rc>, new_root: bool) { + fn unlink_with_rc(&mut self, value: Arc>, new_root: bool) { let mut new_root = new_root; if new_root { @@ -61,7 +61,7 @@ where } pub fn unlink_with(&mut self, val: T) { - self.unlink_with_rc(Rc::new(RefCell::new(val)), true); + self.unlink_with_rc(Arc::new(RefCell::new(val)), true); } pub fn set(&mut self, val: T) { diff --git a/stack-core/src/context.rs b/stack-core/src/context.rs index 6da9627c..0b0d090f 100644 --- a/stack-core/src/context.rs +++ b/stack-core/src/context.rs @@ -1,4 +1,4 @@ -use std::{cell::RefCell, collections::HashMap, rc::Rc}; +use std::{cell::RefCell, collections::HashMap, sync::Arc}; use crate::{ chain::Chain, @@ -141,7 +141,7 @@ impl Context { #[inline] pub fn scope_items( &self, - ) -> impl Iterator>>>)> { + ) -> impl Iterator>>>)> { self.scopes.last().items.iter() } diff --git a/stack-core/src/scope.rs b/stack-core/src/scope.rs index b96ca3ad..af123919 100644 --- a/stack-core/src/scope.rs +++ b/stack-core/src/scope.rs @@ -1,9 +1,9 @@ use core::fmt; -use std::{cell::RefCell, collections::HashMap, fmt::Formatter, rc::Rc}; +use std::{cell::RefCell, collections::HashMap, fmt::Formatter, sync::Arc}; use crate::{chain::Chain, expr::FnIdent, prelude::*}; -pub type Val = Rc>>>; +pub type Val = Arc>>>; #[derive(Default, PartialEq)] pub struct Scope { @@ -50,14 +50,14 @@ impl Scope { } } } else { - let val = Rc::new(RefCell::new(Chain::new(Some(item)))); + let val = Arc::new(RefCell::new(Chain::new(Some(item)))); self.items.insert(name, val); } } pub fn reserve(&mut self, name: Symbol) { if self.items.get(&name).is_none() { - let val = Rc::new(RefCell::new(Chain::new(None))); + let val = Arc::new(RefCell::new(Chain::new(None))); self.items.insert(name, val); } } diff --git a/stack-core/src/source.rs b/stack-core/src/source.rs index 2dc09bf9..2aca9e9d 100644 --- a/stack-core/src/source.rs +++ b/stack-core/src/source.rs @@ -1,5 +1,5 @@ use core::{fmt, num::NonZeroUsize}; -use std::{fs, io, path::Path, rc::Rc}; +use std::{fs, io, path::Path, sync::Arc}; use unicode_segmentation::UnicodeSegmentation; @@ -7,7 +7,7 @@ use unicode_segmentation::UnicodeSegmentation; /// /// This internally stores an [`Rc`], hence it is *cheap* to clone. #[derive(Debug, Clone, PartialEq, Eq)] -pub struct Source(Rc); +pub struct Source(Arc); impl Source { /// Creates a new [`Source`]. @@ -27,7 +27,7 @@ impl Source { ) .collect::>(); - Self(Rc::new(SourceInner { + Self(Arc::new(SourceInner { name, source, line_starts,