MCPcopy Index your code
hub / github.com/RustPython/RustPython / extend_class

Method extend_class

crates/vm/src/stdlib/_ast/python.rs:28–61  ·  view source on GitHub ↗
(ctx: &Context, class: &'static Py<PyType>)

Source from the content-addressed store, hash-verified

26 impl NodeAst {
27 #[extend_class]
28 fn extend_class(ctx: &Context, class: &'static Py<PyType>) {
29 // AST types are mutable (heap types, not IMMUTABLETYPE)
30 // Safety: called during type initialization before any concurrent access
31 unsafe {
32 let flags = &class.slots.flags as *const crate::types::PyTypeFlags
33 as *mut crate::types::PyTypeFlags;
34 (*flags).remove(crate::types::PyTypeFlags::IMMUTABLETYPE);
35 }
36 let empty_tuple = ctx.empty_tuple.clone();
37 class.set_str_attr("_fields", empty_tuple.clone(), ctx);
38 class.set_str_attr("_attributes", empty_tuple.clone(), ctx);
39 class.set_str_attr("__match_args__", empty_tuple.clone(), ctx);
40
41 const AST_REDUCE: PyMethodDef = PyMethodDef::new_const(
42 "__reduce__",
43 |zelf: PyObjectRef, vm: &VirtualMachine| -> PyResult<PyTupleRef> {
44 ast_reduce(zelf, vm)
45 },
46 PyMethodFlags::METHOD,
47 None,
48 );
49 const AST_REPLACE: PyMethodDef = PyMethodDef::new_const(
50 "__replace__",
51 |zelf: PyObjectRef, args: FuncArgs, vm: &VirtualMachine| -> PyResult {
52 ast_replace(zelf, args, vm)
53 },
54 PyMethodFlags::METHOD,
55 None,
56 );
57
58 class.set_str_attr("__reduce__", AST_REDUCE.to_proper_method(class, ctx), ctx);
59 class.set_str_attr("__replace__", AST_REPLACE.to_proper_method(class, ctx), ctx);
60 class.slots.repr.store(Some(ast_repr));
61 }
62
63 #[pyattr]
64 fn _fields(ctx: &Context) -> PyTupleRef {

Callers

nothing calls this directly

Calls 8

ast_reduceFunction · 0.85
ast_replaceFunction · 0.85
set_str_attrMethod · 0.80
to_proper_methodMethod · 0.80
SomeClass · 0.50
removeMethod · 0.45
cloneMethod · 0.45
storeMethod · 0.45

Tested by

no test coverage detected