diff --git a/ast-pyo3/src/gen/to_py_ast.rs b/ast-pyo3/src/gen/to_py_ast.rs index 16ccadb..5038867 100644 --- a/ast-pyo3/src/gen/to_py_ast.rs +++ b/ast-pyo3/src/gen/to_py_ast.rs @@ -1653,8 +1653,8 @@ impl ToPyAst for ast::StmtPass { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; Ok(instance) } @@ -1665,8 +1665,8 @@ impl ToPyAst for ast::StmtBreak { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; Ok(instance) } @@ -1677,8 +1677,8 @@ impl ToPyAst for ast::StmtContinue { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; Ok(instance) } @@ -3429,8 +3429,8 @@ impl ToPyAst for ast::StmtPass { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; let cache = ast_cache(); instance.setattr(cache.lineno.as_ref(py), _range.start.row.get())?; @@ -3449,8 +3449,8 @@ impl ToPyAst for ast::StmtBreak { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; let cache = ast_cache(); instance.setattr(cache.lineno.as_ref(py), _range.start.row.get())?; @@ -3469,8 +3469,8 @@ impl ToPyAst for ast::StmtContinue { fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> { let cache = Self::py_type_cache().get().unwrap(); - let instance = Py::::as_ref(&cache.0, py).call0()?; let Self { range: _range } = self; + let instance = Py::::as_ref(&cache.0, py).call0()?; let cache = ast_cache(); instance.setattr(cache.lineno.as_ref(py), _range.start.row.get())?; diff --git a/ast-pyo3/src/py_ast.rs b/ast-pyo3/src/py_ast.rs index e53e7b2..5aa2dd3 100644 --- a/ast-pyo3/src/py_ast.rs +++ b/ast-pyo3/src/py_ast.rs @@ -131,6 +131,19 @@ struct AstCache { } impl AstCache { + // fn location_vec<'py>(&'static self, py: Python<'py>, range: &SourceRange) -> &'py PyDict { + // let attributes = PyDict::new(py); + // attributes.set_item(self.lineno.as_ref(py), range.start.row.get()).unwrap(); + // attributes.set_item(self.col_offset.as_ref(py), range.start.column.to_zero_indexed()).unwrap(); + // if let Some(end) = range.end { + // attributes.set_item(self.end_lineno.as_ref(py), end.row.get()).unwrap(); + // attributes.set_item( + // self.end_col_offset.as_ref(py), + // end.column.to_zero_indexed(), + // ).unwrap(); + // } + // attributes + // } #[inline] fn none_ref<'py>(&'static self, py: Python<'py>) -> &'py PyAny { Py::::as_ref(&self.none, py) diff --git a/ast-pyo3/src/wrapper.rs b/ast-pyo3/src/wrapper.rs index 9a8b115..38f2a00 100644 --- a/ast-pyo3/src/wrapper.rs +++ b/ast-pyo3/src/wrapper.rs @@ -93,7 +93,7 @@ impl ToPyWrapper for Vec { } } -#[pyclass(module = "rustpython_ast", subclass)] +#[pyclass(module = "rustpython_ast", name = "AST", subclass)] pub struct Ast; #[pymethods] diff --git a/ast/asdl_rs.py b/ast/asdl_rs.py index 9fc3639..dca65ce 100755 --- a/ast/asdl_rs.py +++ b/ast/asdl_rs.py @@ -1078,11 +1078,6 @@ class ToPyo3AstVisitor(EmitVisitor): else: assert False, self.namespace - @property - def location(self): - # lineno, col_offset - pass - def visitModule(self, mod): for dfn in mod.dfns: self.visit(dfn) @@ -1133,12 +1128,13 @@ class ToPyo3AstVisitor(EmitVisitor): def emit_to_pyo3_with_fields(self, cons, type, name): type_info = self.type_info[type.name] + self.emit( f""" impl ToPyAst for ast::{name}{self.generics} {{ #[inline] - fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> {{ - let cache = Self::py_type_cache().get().unwrap(); + fn to_py_ast<'py>(&self, py: Python<'py>) -> PyResult<&'py PyAny> {{ + let cache = Self::py_type_cache().get().unwrap(); """, 0, ) @@ -1171,12 +1167,7 @@ class ToPyo3AstVisitor(EmitVisitor): 3, ) continue - if field.name in ( - "lineno", - "col_offset", - "end_lineno", - "end_col_offset", - ): + if field.name == "lineno": self.emit( f"{rust_field(field.name)}.to_u32().to_object(py),", 3, @@ -1192,11 +1183,11 @@ class ToPyo3AstVisitor(EmitVisitor): ) else: self.emit( - "let instance = Py::::as_ref(&cache.0, py).call0()?;", + "let Self { range: _range } = self;", 1, ) self.emit( - "let Self { range: _range } = self;", + """let instance = Py::::as_ref(&cache.0, py).call0()?;""", 1, ) if type.value.attributes and self.namespace == "located": @@ -1210,7 +1201,7 @@ class ToPyo3AstVisitor(EmitVisitor): instance.setattr(cache.end_col_offset.as_ref(py), end.column.get())?; } """, - 1, + 0, ) self.emit( """