Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-cpython/src/dirstate/dirstate_map.rs @ 44296:bad4e7b361d2
rust-cpython: switch to upstreamed version of PySharedRefCell
Our PyLeaked is identical to cpython::UnsafePyLeaked. I've renamed it because
it provides mostly unsafe functions.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 25 Jan 2020 17:26:23 +0900 |
parents | 281642cd1d04 |
children | cf1f8660e568 |
line wrap: on
line diff
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs Sat Jan 25 17:21:06 2020 +0900 +++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs Sat Jan 25 17:26:23 2020 +0900 @@ -14,13 +14,12 @@ use cpython::{ exc, ObjectProtocol, PyBool, PyBytes, PyClone, PyDict, PyErr, PyObject, - PyResult, PyTuple, Python, PythonObject, ToPyObject, + PyResult, PyTuple, Python, PythonObject, ToPyObject, UnsafePyLeaked, }; use crate::{ dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator}, dirstate::{dirs_multiset::Dirs, make_dirstate_tuple}, - ref_sharing::{PyLeaked, PySharedRefCell}, }; use hg::{ utils::hg_path::{HgPath, HgPathBuf}, @@ -42,14 +41,11 @@ // All attributes also have to have a separate refcount data attribute for // leaks, with all methods that go along for reference sharing. py_class!(pub class DirstateMap |py| { - data inner_: PySharedRefCell<RustDirstateMap>; + @shared data inner: RustDirstateMap; def __new__(_cls, _root: PyObject) -> PyResult<Self> { let inner = RustDirstateMap::default(); - Self::create_instance( - py, - PySharedRefCell::new(inner), - ) + Self::create_instance(py, inner) } def clear(&self) -> PyResult<PyObject> { @@ -497,18 +493,16 @@ } } -py_shared_ref!(DirstateMap, RustDirstateMap, inner_, inner); - py_shared_iterator!( DirstateMapKeysIterator, - PyLeaked<StateMapIter<'static>>, + UnsafePyLeaked<StateMapIter<'static>>, DirstateMap::translate_key, Option<PyBytes> ); py_shared_iterator!( DirstateMapItemsIterator, - PyLeaked<StateMapIter<'static>>, + UnsafePyLeaked<StateMapIter<'static>>, DirstateMap::translate_key_value, Option<(PyBytes, PyObject)> );