mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
add missing __class_getitem__ in several types
Signed-off-by: snowapril <sinjihng@gmail.com>
This commit is contained in:
1 parent
f491bb8fc4
commit
32ba09c407
11 files changed
+84
-13
No files matched your search
@@ -1,4 +1,4 @@
|
||||
use super::{PyCode, PyStrRef, PyTypeRef};
|
||||
use super::{PyCode, PyGenericAlias, PyStrRef, PyTypeRef};
|
||||
use crate::{
|
||||
builtins::PyBaseExceptionRef,
|
||||
coroutine::Coro,
|
||||
@@ -123,6 +123,11 @@ impl PyAsyncGen {
|
||||
fn ag_code(&self, _vm: &VirtualMachine) -> PyRef<PyCode> {
|
||||
self.inner.frame().code.clone()
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
impl Unconstructible for PyAsyncGen {}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use super::{
|
||||
set::PySetInner, IterStatus, PositionIterInternal, PyBaseExceptionRef, PySet, PyStrRef,
|
||||
PyTypeRef,
|
||||
set::PySetInner, IterStatus, PositionIterInternal, PyBaseExceptionRef, PyGenericAlias, PySet,
|
||||
PyStrRef, PyTypeRef,
|
||||
};
|
||||
use crate::{
|
||||
builtins::PyTuple,
|
||||
@@ -413,6 +413,11 @@ impl PyDict {
|
||||
fn reversed(zelf: PyRef<Self>) -> PyDictReverseKeyIterator {
|
||||
PyDictReverseKeyIterator::new(zelf)
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsMapping for PyDict {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::{IterStatus, PositionIterInternal, PyIntRef, PyTupleRef, PyTypeRef};
|
||||
use super::{IterStatus, PositionIterInternal, PyGenericAlias, PyIntRef, PyTupleRef, PyTypeRef};
|
||||
use crate::common::lock::{PyMutex, PyRwLock};
|
||||
use crate::{
|
||||
function::{IntoPyObject, OptionalArg},
|
||||
@@ -47,7 +47,12 @@ impl Constructor for PyEnumerate {
|
||||
}
|
||||
|
||||
#[pyimpl(with(IterNext, Constructor), flags(BASETYPE))]
|
||||
impl PyEnumerate {}
|
||||
impl PyEnumerate {
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl IterNextIterable for PyEnumerate {}
|
||||
impl IterNext for PyEnumerate {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::{PyDict, PyList, PyStrRef, PyTuple, PyTypeRef};
|
||||
use super::{PyDict, PyGenericAlias, PyList, PyStrRef, PyTuple, PyTypeRef};
|
||||
use crate::{
|
||||
function::{IntoPyObject, OptionalArg},
|
||||
protocol::{PyMapping, PyMappingMethods},
|
||||
@@ -148,6 +148,11 @@ impl PyMappingProxy {
|
||||
};
|
||||
Ok(format!("mappingproxy({})", vm.to_repr(&obj)?))
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsMapping for PyMappingProxy {
|
||||
|
||||
+14
-1
@@ -1,7 +1,10 @@
|
||||
/*
|
||||
* Builtin set type with a sequence of unique items.
|
||||
*/
|
||||
use super::{builtins_iter, IterStatus, PositionIterInternal, PyDictRef, PyTupleRef, PyTypeRef};
|
||||
use super::{
|
||||
builtins_iter, IterStatus, PositionIterInternal, PyDictRef, PyGenericAlias, PyTupleRef,
|
||||
PyTypeRef,
|
||||
};
|
||||
use crate::common::{ascii, hash::PyHash, lock::PyMutex, rc::PyRc};
|
||||
use crate::{
|
||||
dictdatatype::{self, DictSize},
|
||||
@@ -619,6 +622,11 @@ impl PySet {
|
||||
) -> PyResult<(PyTypeRef, PyTupleRef, Option<PyDictRef>)> {
|
||||
reduce_set(zelf.as_ref(), vm)
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl Comparable for PySet {
|
||||
@@ -810,6 +818,11 @@ impl PyFrozenSet {
|
||||
) -> PyResult<(PyTypeRef, PyTupleRef, Option<PyDictRef>)> {
|
||||
reduce_set(zelf.as_ref(), vm)
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl Hashable for PyFrozenSet {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::{PositionIterInternal, PyTypeRef};
|
||||
use super::{PositionIterInternal, PyGenericAlias, PyTypeRef};
|
||||
use crate::common::hash::PyHash;
|
||||
use crate::{
|
||||
function::{IntoPyObject, OptionalArg},
|
||||
@@ -303,6 +303,11 @@ impl PyTuple {
|
||||
};
|
||||
(tup_arg,)
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsMapping for PyTuple {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use super::PyTypeRef;
|
||||
use super::{PyGenericAlias, PyTypeRef};
|
||||
use crate::common::hash::PyHash;
|
||||
use crate::{
|
||||
function::OptionalArg,
|
||||
@@ -83,6 +83,11 @@ impl PyWeak {
|
||||
format!("<weakref at {:#x}; dead>", id)
|
||||
}
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl Hashable for PyWeak {
|
||||
|
||||
@@ -2,7 +2,7 @@ pub(crate) use _collections::make_module;
|
||||
|
||||
#[pymodule]
|
||||
mod _collections {
|
||||
use crate::builtins::PositionIterInternal;
|
||||
use crate::builtins::{PositionIterInternal, PyGenericAlias};
|
||||
use crate::common::lock::{PyMutex, PyRwLock, PyRwLockReadGuard, PyRwLockWriteGuard};
|
||||
use crate::{
|
||||
builtins::{
|
||||
@@ -529,6 +529,11 @@ mod _collections {
|
||||
};
|
||||
Ok(vm.new_pyobj((cls, value, vm.ctx.none(), PyDequeIterator::new(zelf))))
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl Comparable for PyDeque {
|
||||
|
||||
@@ -7,7 +7,7 @@ mod decl {
|
||||
rc::PyRc,
|
||||
};
|
||||
use crate::{
|
||||
builtins::{int, PyInt, PyIntRef, PyTuple, PyTupleRef, PyTypeRef},
|
||||
builtins::{int, PyGenericAlias, PyInt, PyIntRef, PyTuple, PyTupleRef, PyTypeRef},
|
||||
function::{ArgCallable, FuncArgs, IntoPyObject, OptionalArg, OptionalOption, PosArgs},
|
||||
protocol::{PyIter, PyIterReturn},
|
||||
stdlib::sys,
|
||||
@@ -54,6 +54,11 @@ mod decl {
|
||||
}
|
||||
.into_ref_with_type(vm, cls)
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
impl IterNextIterable for PyItertoolsChain {}
|
||||
impl IterNext for PyItertoolsChain {
|
||||
|
||||
+8
-1
@@ -429,7 +429,9 @@ pub(super) mod _os {
|
||||
};
|
||||
use crate::common::lock::{OnceCell, PyRwLock};
|
||||
use crate::{
|
||||
builtins::{PyBytesRef, PyIntRef, PyStrRef, PyTuple, PyTupleRef, PyTypeRef},
|
||||
builtins::{
|
||||
PyBytesRef, PyGenericAlias, PyIntRef, PyStrRef, PyTuple, PyTupleRef, PyTypeRef,
|
||||
},
|
||||
crt_fd::{Fd, Offset},
|
||||
function::{ArgBytesLike, FuncArgs, IntoPyException, IntoPyObject, OptionalArg},
|
||||
protocol::PyIterReturn,
|
||||
@@ -890,6 +892,11 @@ pub(super) mod _os {
|
||||
Ok(format!("<{}>", zelf.class()))
|
||||
}
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
#[pyattr]
|
||||
|
||||
+12
-1
@@ -4,7 +4,8 @@ pub(crate) use _sre::make_module;
|
||||
mod _sre {
|
||||
use crate::{
|
||||
builtins::{
|
||||
PyCallableIterator, PyDictRef, PyInt, PyList, PyStr, PyStrRef, PyTuple, PyTupleRef,
|
||||
PyCallableIterator, PyDictRef, PyGenericAlias, PyInt, PyList, PyStr, PyStrRef, PyTuple,
|
||||
PyTupleRef, PyTypeRef,
|
||||
},
|
||||
common::{ascii, hash::PyHash},
|
||||
function::{ArgCallable, IntoPyObject, OptionalArg, PosArgs},
|
||||
@@ -513,6 +514,11 @@ mod _sre {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
impl Hashable for Pattern {
|
||||
@@ -787,6 +793,11 @@ mod _sre {
|
||||
}
|
||||
Some(slice_drive(&str_drive, start as usize, end as usize, vm))
|
||||
}
|
||||
|
||||
#[pyclassmethod(magic)]
|
||||
fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias {
|
||||
PyGenericAlias::new(cls, args, vm)
|
||||
}
|
||||
}
|
||||
|
||||
#[pyattr]
|
||||
|
||||
Reference in new issue
Block a user