Mercurial > hg
diff rust/hg-cpython/src/dirstate/dirs_multiset.rs @ 42849:8db8fa1de2ef
rust-cpython: introduce restricted variant of RefCell
This should catch invalid borrow_mut() calls. Still the ref-sharing
interface is unsafe.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 01 Sep 2019 17:37:30 +0900 |
parents | 2e1f74cc3350 |
children | 8f549c46bc64 |
line wrap: on
line diff
--- a/rust/hg-cpython/src/dirstate/dirs_multiset.rs Sun Sep 01 17:35:14 2019 +0900 +++ b/rust/hg-cpython/src/dirstate/dirs_multiset.rs Sun Sep 01 17:37:30 2019 +0900 @@ -16,11 +16,12 @@ Python, }; -use crate::{dirstate::extract_dirstate, ref_sharing::PySharedState}; +use crate::dirstate::extract_dirstate; +use crate::ref_sharing::{PySharedRefCell, PySharedState}; use hg::{DirsMultiset, DirstateMapError, DirstateParseError, EntryState}; py_class!(pub class Dirs |py| { - data inner: RefCell<DirsMultiset>; + data inner: PySharedRefCell<DirsMultiset>; data py_shared_state: PySharedState; // `map` is either a `dict` or a flat iterator (usually a `set`, sometimes @@ -53,7 +54,7 @@ Self::create_instance( py, - RefCell::new(inner), + PySharedRefCell::new(inner), PySharedState::default() ) } @@ -104,7 +105,11 @@ impl Dirs { pub fn from_inner(py: Python, d: DirsMultiset) -> PyResult<Self> { - Self::create_instance(py, RefCell::new(d), PySharedState::default()) + Self::create_instance( + py, + PySharedRefCell::new(d), + PySharedState::default(), + ) } fn translate_key(py: Python, res: &Vec<u8>) -> PyResult<Option<PyBytes>> {