Fake PEP-0695 with empty __type_params__ (#5098)

This commit is contained in:
Jeong, YunWon
2023-10-22 18:01:06 -07:00
committed by GitHub
parent d32cb7efdd
commit a75f26b922
2 changed files with 31 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ pub struct PyFunction {
defaults_and_kwdefaults: PyMutex<(Option<PyTupleRef>, Option<PyDictRef>)>,
name: PyMutex<PyStrRef>,
qualname: PyMutex<PyStrRef>,
type_params: PyMutex<PyTupleRef>,
#[cfg(feature = "jit")]
jitted_code: OnceCell<CompiledCode>,
}
@@ -54,7 +55,8 @@ impl PyFunction {
closure: Option<PyTupleTyped<PyCellRef>>,
defaults: Option<PyTupleRef>,
kw_only_defaults: Option<PyDictRef>,
qualname: PyMutex<PyStrRef>,
qualname: PyStrRef,
type_params: PyTupleRef,
) -> Self {
let name = PyMutex::new(code.obj_name.to_owned());
PyFunction {
@@ -63,7 +65,8 @@ impl PyFunction {
closure,
defaults_and_kwdefaults: PyMutex::new((defaults, kw_only_defaults)),
name,
qualname,
qualname: PyMutex::new(qualname),
type_params: PyMutex::new(type_params),
#[cfg(feature = "jit")]
jitted_code: OnceCell::new(),
}
@@ -428,6 +431,30 @@ impl PyFunction {
Ok(())
}
#[pygetset(magic)]
fn type_params(&self) -> PyTupleRef {
self.type_params.lock().clone()
}
#[pygetset(magic, setter)]
fn set_type_params(
&self,
value: PySetterValue<PyTupleRef>,
vm: &VirtualMachine,
) -> PyResult<()> {
match value {
PySetterValue::Assign(value) => {
*self.type_params.lock() = value;
}
PySetterValue::Delete => {
return Err(
vm.new_type_error("__type_params__ must be set to a tuple object".to_string())
);
}
}
Ok(())
}
#[cfg(feature = "jit")]
#[pymethod(magic)]
fn jit(zelf: PyRef<Self>, vm: &VirtualMachine) -> PyResult<()> {

View File

@@ -1642,7 +1642,8 @@ impl ExecutingFrame<'_> {
closure,
defaults,
kw_only_defaults,
PyMutex::new(qualified_name.clone()),
qualified_name.clone(),
vm.ctx.empty_tuple.clone(), // FIXME: fake implementation
)
.into_pyobject(vm);