diff --git a/ast/asdl_rs.py b/ast/asdl_rs.py index 8a3b8e0..a16c46e 100755 --- a/ast/asdl_rs.py +++ b/ast/asdl_rs.py @@ -1053,11 +1053,12 @@ class ToPyo3AstVisitor(EmitVisitor): if type.value.attributes and self.namespace == "located": self.emit( """ - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } """, 1, @@ -1148,8 +1149,7 @@ class Pyo3StructVisitor(EmitVisitor): }} impl ToPyObject for {rust_name} {{ fn to_object(&self, py: Python) -> PyObject {{ - let initializer = PyClassInitializer::from(AST) - .add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) }} }} diff --git a/ast/src/gen/pyo3_wrapper_located.rs b/ast/src/gen/pyo3_wrapper_located.rs index d5fa4f9..ba55ee2 100644 --- a/ast/src/gen/pyo3_wrapper_located.rs +++ b/ast/src/gen/pyo3_wrapper_located.rs @@ -19,7 +19,7 @@ impl Mod { } impl ToPyObject for Mod { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -207,7 +207,7 @@ impl Stmt { } impl ToPyObject for Stmt { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -1481,7 +1481,7 @@ impl Expr { } impl ToPyObject for Expr { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2671,7 +2671,7 @@ impl ExprContext { } impl ToPyObject for ExprContext { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2731,7 +2731,7 @@ impl Boolop { } impl ToPyObject for Boolop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2779,7 +2779,7 @@ impl Operator { } impl ToPyObject for Operator { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2959,7 +2959,7 @@ impl Unaryop { } impl ToPyObject for Unaryop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3031,7 +3031,7 @@ impl Cmpop { } impl ToPyObject for Cmpop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3226,7 +3226,7 @@ impl Excepthandler { } impl ToPyObject for Excepthandler { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3582,7 +3582,7 @@ impl Pattern { } impl ToPyObject for Pattern { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3938,7 +3938,7 @@ impl TypeIgnore { } impl ToPyObject for TypeIgnore { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } diff --git a/ast/src/gen/pyo3_wrapper_ranged.rs b/ast/src/gen/pyo3_wrapper_ranged.rs index 3920dc8..dfa0a30 100644 --- a/ast/src/gen/pyo3_wrapper_ranged.rs +++ b/ast/src/gen/pyo3_wrapper_ranged.rs @@ -19,7 +19,7 @@ impl Mod { } impl ToPyObject for Mod { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -207,7 +207,7 @@ impl Stmt { } impl ToPyObject for Stmt { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -1481,7 +1481,7 @@ impl Expr { } impl ToPyObject for Expr { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2671,7 +2671,7 @@ impl ExprContext { } impl ToPyObject for ExprContext { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2731,7 +2731,7 @@ impl Boolop { } impl ToPyObject for Boolop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2779,7 +2779,7 @@ impl Operator { } impl ToPyObject for Operator { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -2959,7 +2959,7 @@ impl Unaryop { } impl ToPyObject for Unaryop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3031,7 +3031,7 @@ impl Cmpop { } impl ToPyObject for Cmpop { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3226,7 +3226,7 @@ impl Excepthandler { } impl ToPyObject for Excepthandler { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3582,7 +3582,7 @@ impl Pattern { } impl ToPyObject for Pattern { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } @@ -3938,7 +3938,7 @@ impl TypeIgnore { } impl ToPyObject for TypeIgnore { fn to_object(&self, py: Python) -> PyObject { - let initializer = PyClassInitializer::from(AST).add_subclass(self.clone()); + let initializer = Self::new(); Py::new(py, initializer).unwrap().into_py(py) } } diff --git a/ast/src/gen/to_pyo3.rs b/ast/src/gen/to_pyo3.rs index 1d6dbe4..c8a7478 100644 --- a/ast/src/gen/to_pyo3.rs +++ b/ast/src/gen/to_pyo3.rs @@ -2794,11 +2794,12 @@ impl ToPyo3Ast for crate::StmtFunctionDef { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2831,11 +2832,12 @@ impl ToPyo3Ast for crate::StmtAsyncFunctionDef { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2866,11 +2868,12 @@ impl ToPyo3Ast for crate::StmtClassDef { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2888,11 +2891,12 @@ impl ToPyo3Ast for crate::StmtReturn { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2910,11 +2914,12 @@ impl ToPyo3Ast for crate::StmtDelete { } = self; let instance = cache.0.call1(py, (targets.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2941,11 +2946,12 @@ impl ToPyo3Ast for crate::StmtAssign { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -2972,11 +2978,12 @@ impl ToPyo3Ast for crate::StmtAugAssign { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3005,11 +3012,12 @@ impl ToPyo3Ast for crate::StmtAnnAssign { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3040,11 +3048,12 @@ impl ToPyo3Ast for crate::StmtFor { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3075,11 +3084,12 @@ impl ToPyo3Ast for crate::StmtAsyncFor { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3106,11 +3116,12 @@ impl ToPyo3Ast for crate::StmtWhile { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3137,11 +3148,12 @@ impl ToPyo3Ast for crate::StmtIf { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3168,11 +3180,12 @@ impl ToPyo3Ast for crate::StmtWith { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3199,11 +3212,12 @@ impl ToPyo3Ast for crate::StmtAsyncWith { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3224,11 +3238,12 @@ impl ToPyo3Ast for crate::StmtMatch { .0 .call1(py, (subject.to_pyo3_ast(py)?, cases.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3249,11 +3264,12 @@ impl ToPyo3Ast for crate::StmtRaise { .0 .call1(py, (exc.to_pyo3_ast(py)?, cause.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3282,11 +3298,12 @@ impl ToPyo3Ast for crate::StmtTry { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3315,11 +3332,12 @@ impl ToPyo3Ast for crate::StmtTryStar { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3340,11 +3358,12 @@ impl ToPyo3Ast for crate::StmtAssert { .0 .call1(py, (test.to_pyo3_ast(py)?, msg.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3362,11 +3381,12 @@ impl ToPyo3Ast for crate::StmtImport { } = self; let instance = cache.0.call1(py, (names.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3393,11 +3413,12 @@ impl ToPyo3Ast for crate::StmtImportFrom { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3415,11 +3436,12 @@ impl ToPyo3Ast for crate::StmtGlobal { } = self; let instance = cache.0.call1(py, (names.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3437,11 +3459,12 @@ impl ToPyo3Ast for crate::StmtNonlocal { } = self; let instance = cache.0.call1(py, (names.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3459,11 +3482,12 @@ impl ToPyo3Ast for crate::StmtExpr { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3478,11 +3502,12 @@ impl ToPyo3Ast for crate::StmtPass { let instance = cache.0.call0(py)?; let Self { range: _range } = self; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3497,11 +3522,12 @@ impl ToPyo3Ast for crate::StmtBreak { let instance = cache.0.call0(py)?; let Self { range: _range } = self; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3516,11 +3542,12 @@ impl ToPyo3Ast for crate::StmtContinue { let instance = cache.0.call0(py)?; let Self { range: _range } = self; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3577,11 +3604,12 @@ impl ToPyo3Ast for crate::ExprBoolOp { .0 .call1(py, (op.to_pyo3_ast(py)?, values.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3602,11 +3630,12 @@ impl ToPyo3Ast for crate::ExprNamedExpr { .0 .call1(py, (target.to_pyo3_ast(py)?, value.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3633,11 +3662,12 @@ impl ToPyo3Ast for crate::ExprBinOp { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3658,11 +3688,12 @@ impl ToPyo3Ast for crate::ExprUnaryOp { .0 .call1(py, (op.to_pyo3_ast(py)?, operand.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3683,11 +3714,12 @@ impl ToPyo3Ast for crate::ExprLambda { .0 .call1(py, (args.to_pyo3_ast(py)?, body.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3714,11 +3746,12 @@ impl ToPyo3Ast for crate::ExprIfExp { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3739,11 +3772,12 @@ impl ToPyo3Ast for crate::ExprDict { .0 .call1(py, (keys.to_pyo3_ast(py)?, values.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3761,11 +3795,12 @@ impl ToPyo3Ast for crate::ExprSet { } = self; let instance = cache.0.call1(py, (elts.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3786,11 +3821,12 @@ impl ToPyo3Ast for crate::ExprListComp { .0 .call1(py, (elt.to_pyo3_ast(py)?, generators.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3811,11 +3847,12 @@ impl ToPyo3Ast for crate::ExprSetComp { .0 .call1(py, (elt.to_pyo3_ast(py)?, generators.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3842,11 +3879,12 @@ impl ToPyo3Ast for crate::ExprDictComp { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3867,11 +3905,12 @@ impl ToPyo3Ast for crate::ExprGeneratorExp { .0 .call1(py, (elt.to_pyo3_ast(py)?, generators.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3889,11 +3928,12 @@ impl ToPyo3Ast for crate::ExprAwait { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3911,11 +3951,12 @@ impl ToPyo3Ast for crate::ExprYield { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3933,11 +3974,12 @@ impl ToPyo3Ast for crate::ExprYieldFrom { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3964,11 +4006,12 @@ impl ToPyo3Ast for crate::ExprCompare { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -3995,11 +4038,12 @@ impl ToPyo3Ast for crate::ExprCall { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4026,11 +4070,12 @@ impl ToPyo3Ast for crate::ExprFormattedValue { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4048,11 +4093,12 @@ impl ToPyo3Ast for crate::ExprJoinedStr { } = self; let instance = cache.0.call1(py, (values.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4073,11 +4119,12 @@ impl ToPyo3Ast for crate::ExprConstant { .0 .call1(py, (value.to_pyo3_ast(py)?, kind.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4104,11 +4151,12 @@ impl ToPyo3Ast for crate::ExprAttribute { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4135,11 +4183,12 @@ impl ToPyo3Ast for crate::ExprSubscript { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4160,11 +4209,12 @@ impl ToPyo3Ast for crate::ExprStarred { .0 .call1(py, (value.to_pyo3_ast(py)?, ctx.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4185,11 +4235,12 @@ impl ToPyo3Ast for crate::ExprName { .0 .call1(py, (id.to_pyo3_ast(py)?, ctx.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4210,11 +4261,12 @@ impl ToPyo3Ast for crate::ExprList { .0 .call1(py, (elts.to_pyo3_ast(py)?, ctx.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4235,11 +4287,12 @@ impl ToPyo3Ast for crate::ExprTuple { .0 .call1(py, (elts.to_pyo3_ast(py)?, ctx.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4266,11 +4319,12 @@ impl ToPyo3Ast for crate::ExprSlice { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4333,11 +4387,12 @@ impl ToPyo3Ast for crate::ExcepthandlerExceptHandler { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4396,11 +4451,12 @@ impl ToPyo3Ast for crate::Arg { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4421,11 +4477,12 @@ impl ToPyo3Ast for crate::Keyword { .0 .call1(py, (arg.to_pyo3_ast(py)?, value.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4446,11 +4503,12 @@ impl ToPyo3Ast for crate::Alias { .0 .call1(py, (name.to_pyo3_ast(py)?, asname.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4531,11 +4589,12 @@ impl ToPyo3Ast for crate::PatternMatchValue { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4553,11 +4612,12 @@ impl ToPyo3Ast for crate::PatternMatchSingleton { } = self; let instance = cache.0.call1(py, (value.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4575,11 +4635,12 @@ impl ToPyo3Ast for crate::PatternMatchSequence { } = self; let instance = cache.0.call1(py, (patterns.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4606,11 +4667,12 @@ impl ToPyo3Ast for crate::PatternMatchMapping { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4639,11 +4701,12 @@ impl ToPyo3Ast for crate::PatternMatchClass { ), )?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4661,11 +4724,12 @@ impl ToPyo3Ast for crate::PatternMatchStar { } = self; let instance = cache.0.call1(py, (name.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4686,11 +4750,12 @@ impl ToPyo3Ast for crate::PatternMatchAs { .0 .call1(py, (pattern.to_pyo3_ast(py)?, name.to_pyo3_ast(py)?))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) @@ -4708,11 +4773,12 @@ impl ToPyo3Ast for crate::PatternMatchOr { } = self; let instance = cache.0.call1(py, (patterns.to_pyo3_ast(py)?,))?; - instance.setattr(py, "lineno", _range.start.row.get())?; - instance.setattr(py, "col_offset", _range.start.column.get())?; + let cache = ast_key_cache().get().unwrap(); + instance.setattr(py, cache.lineno.as_ref(py), _range.start.row.get())?; + instance.setattr(py, cache.col_offset.as_ref(py), _range.start.column.get())?; if let Some(end) = _range.end { - instance.setattr(py, "end_lineno", end.row.get())?; - instance.setattr(py, "end_col_offset", end.column.get())?; + instance.setattr(py, cache.end_lineno.as_ref(py), end.row.get())?; + instance.setattr(py, cache.end_col_offset.as_ref(py), end.column.get())?; } Ok(instance) diff --git a/ast/src/pyo3.rs b/ast/src/pyo3.rs index 253ab91..e54fff2 100644 --- a/ast/src/pyo3.rs +++ b/ast/src/pyo3.rs @@ -1,8 +1,10 @@ use crate::{source_code::SourceRange, text_size::TextRange, ConversionFlag, Node}; use num_complex::Complex64; use once_cell::sync::OnceCell; -use pyo3::prelude::*; -use pyo3::types::{PyBytes, PyList, PyTuple}; +use pyo3::{ + prelude::*, + types::{PyBytes, PyList, PyString, PyTuple}, +}; pub trait Pyo3Node { fn py_type_cache() -> &'static OnceCell<(Py, Py)> { @@ -123,7 +125,28 @@ fn cache_py_type(ast_module: &PyAny) -> PyResult<()> { Ok(()) } +struct AstKeyCache { + lineno: Py, + col_offset: Py, + end_lineno: Py, + end_col_offset: Py, +} + +fn ast_key_cache() -> &'static OnceCell { + { + static PY_TYPE: OnceCell = OnceCell::new(); + &PY_TYPE + } +} + pub fn init(py: Python) -> PyResult<()> { + ast_key_cache().get_or_init(|| AstKeyCache { + lineno: pyo3::intern!(py, "lineno").into_py(py), + col_offset: pyo3::intern!(py, "col_offset").into_py(py), + end_lineno: pyo3::intern!(py, "end_lineno").into_py(py), + end_col_offset: pyo3::intern!(py, "end_col_offset").into_py(py), + }); + init_types(py) }