mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
feature: PyTraverse derive macro for traverse object's childrens(like CPython's tp_traverse) (#4872)
This commit is contained in:
1 parent
2c90b128c3
commit
94bdb6b97a
59 files changed
+940
-120
No files matched your search
+32
-7
@@ -69,6 +69,7 @@ mod _sqlite {
|
||||
AsObject, Py, PyAtomicRef, PyObject, PyObjectRef, PyPayload, PyRef, PyResult,
|
||||
TryFromBorrowedObject, VirtualMachine,
|
||||
__exports::paste,
|
||||
object::{Traverse, TraverseFn},
|
||||
};
|
||||
use std::{
|
||||
ffi::{c_int, c_longlong, c_uint, c_void, CStr},
|
||||
@@ -311,6 +312,13 @@ mod _sqlite {
|
||||
uri: bool,
|
||||
}
|
||||
|
||||
unsafe impl Traverse for ConnectArgs {
|
||||
fn traverse(&self, tracer_fn: &mut TraverseFn) {
|
||||
self.isolation_level.traverse(tracer_fn);
|
||||
self.factory.traverse(tracer_fn);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
struct BackupArgs {
|
||||
#[pyarg(any)]
|
||||
@@ -325,36 +333,48 @@ mod _sqlite {
|
||||
sleep: f64,
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
unsafe impl Traverse for BackupArgs {
|
||||
fn traverse(&self, tracer_fn: &mut TraverseFn) {
|
||||
self.progress.traverse(tracer_fn);
|
||||
self.name.traverse(tracer_fn);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromArgs, Traverse)]
|
||||
struct CreateFunctionArgs {
|
||||
#[pyarg(any)]
|
||||
name: PyStrRef,
|
||||
#[pytraverse(skip)]
|
||||
#[pyarg(any)]
|
||||
narg: c_int,
|
||||
#[pyarg(any)]
|
||||
func: PyObjectRef,
|
||||
#[pytraverse(skip)]
|
||||
#[pyarg(named, default)]
|
||||
deterministic: bool,
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
#[derive(FromArgs, Traverse)]
|
||||
struct CreateAggregateArgs {
|
||||
#[pyarg(any)]
|
||||
name: PyStrRef,
|
||||
#[pytraverse(skip)]
|
||||
#[pyarg(positional)]
|
||||
narg: c_int,
|
||||
#[pyarg(positional)]
|
||||
aggregate_class: PyObjectRef,
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
#[derive(FromArgs, Traverse)]
|
||||
struct BlobOpenArgs {
|
||||
#[pyarg(positional)]
|
||||
table: PyStrRef,
|
||||
#[pyarg(positional)]
|
||||
column: PyStrRef,
|
||||
#[pytraverse(skip)]
|
||||
#[pyarg(positional)]
|
||||
row: i64,
|
||||
#[pytraverse(skip)]
|
||||
#[pyarg(named, default)]
|
||||
readonly: bool,
|
||||
#[pyarg(named, default = "vm.ctx.new_str(stringify!(main))")]
|
||||
@@ -1340,20 +1360,24 @@ mod _sqlite {
|
||||
}
|
||||
|
||||
#[pyattr]
|
||||
#[pyclass(name)]
|
||||
#[pyclass(name, traverse)]
|
||||
#[derive(Debug, PyPayload)]
|
||||
struct Cursor {
|
||||
connection: PyRef<Connection>,
|
||||
#[pytraverse(skip)]
|
||||
arraysize: PyAtomic<c_int>,
|
||||
#[pytraverse(skip)]
|
||||
row_factory: PyAtomicRef<Option<PyObject>>,
|
||||
inner: PyMutex<Option<CursorInner>>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Traverse)]
|
||||
struct CursorInner {
|
||||
description: Option<PyTupleRef>,
|
||||
row_cast_map: Vec<Option<PyObjectRef>>,
|
||||
#[pytraverse(skip)]
|
||||
lastrowid: i64,
|
||||
#[pytraverse(skip)]
|
||||
rowcount: i64,
|
||||
statement: Option<PyRef<Statement>>,
|
||||
}
|
||||
@@ -1793,7 +1817,7 @@ mod _sqlite {
|
||||
}
|
||||
|
||||
#[pyattr]
|
||||
#[pyclass(name)]
|
||||
#[pyclass(name, traverse)]
|
||||
#[derive(Debug, PyPayload)]
|
||||
struct Row {
|
||||
data: PyTupleRef,
|
||||
@@ -1922,10 +1946,11 @@ mod _sqlite {
|
||||
}
|
||||
|
||||
#[pyattr]
|
||||
#[pyclass(name)]
|
||||
#[pyclass(name, traverse)]
|
||||
#[derive(Debug, PyPayload)]
|
||||
struct Blob {
|
||||
connection: PyRef<Connection>,
|
||||
#[pytraverse(skip)]
|
||||
inner: PyMutex<Option<BlobInner>>,
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user