diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index 59f41848498..26fdea2af4b 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -457,7 +457,6 @@ def check_body(body, expected_methods): check_body('\n'.join((gen, func)), ('genexpr',)) check_body('\n'.join((func, gen)), ('genexpr',)) - @unittest.expectedFailure # TODO: RUSTPYTHON def test_filename_correct(self): ### Bug tickler: SyntaxError file name correct whether error raised ### while parsing or building symbol table. diff --git a/crates/codegen/src/symboltable.rs b/crates/codegen/src/symboltable.rs index 22bea20fa6c..b6266686941 100644 --- a/crates/codegen/src/symboltable.rs +++ b/crates/codegen/src/symboltable.rs @@ -1185,13 +1185,15 @@ impl SymbolTableBuilder { match &statement { Stmt::Global(StmtGlobal { names, .. }) => { + let statement_range = statement.range(); for name in names { - self.register_ident(name, SymbolUsage::Global)?; + self.register_name(name.as_str(), SymbolUsage::Global, statement_range)?; } } Stmt::Nonlocal(StmtNonlocal { names, .. }) => { + let statement_range = statement.range(); for name in names { - self.register_ident(name, SymbolUsage::Nonlocal)?; + self.register_name(name.as_str(), SymbolUsage::Nonlocal, statement_range)?; } } Stmt::FunctionDef(StmtFunctionDef { diff --git a/crates/vm/src/stdlib/symtable.rs b/crates/vm/src/stdlib/symtable.rs index 881c5519843..ca5122aa431 100644 --- a/crates/vm/src/stdlib/symtable.rs +++ b/crates/vm/src/stdlib/symtable.rs @@ -6,6 +6,7 @@ mod _symtable { PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine, builtins::{PyDictRef, PyStrRef}, compiler, + ospath::OsPath, }; use alloc::fmt; use rustpython_codegen::symboltable::{ @@ -111,7 +112,7 @@ mod _symtable { #[pyfunction] fn symtable( source: PyStrRef, - filename: PyStrRef, + filename: OsPath, mode: PyStrRef, vm: &VirtualMachine, ) -> PyResult> { @@ -119,8 +120,9 @@ mod _symtable { .as_str() .parse::() .map_err(|err| vm.new_value_error(err.to_string()))?; + let filename = filename.to_string_lossy(); - let symtable = compiler::compile_symtable(source.as_str(), mode, filename.as_str()) + let symtable = compiler::compile_symtable(source.as_str(), mode, filename.as_ref()) .map_err(|err| vm.new_syntax_error(&err, Some(source.as_str())))?; let py_symbol_table = to_py_symbol_table(symtable);