Skip to content

Commit 16f7737

Browse files
committed
Correct symbols attr
1 parent 570fb54 commit 16f7737

File tree

2 files changed

+10
-31
lines changed

2 files changed

+10
-31
lines changed

Lib/test/test_symtable.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -313,15 +313,11 @@ def test_referenced(self):
313313
self.assertTrue(self.spam.lookup("internal").is_referenced())
314314
self.assertFalse(self.spam.lookup("x").is_referenced())
315315

316-
# TODO: RUSTPYTHON
317-
@unittest.expectedFailure
318316
def test_parameters(self):
319317
for sym in ("a", "var", "kw"):
320318
self.assertTrue(self.spam.lookup(sym).is_parameter())
321319
self.assertFalse(self.spam.lookup("x").is_parameter())
322320

323-
# TODO: RUSTPYTHON
324-
@unittest.expectedFailure
325321
def test_symbol_lookup(self):
326322
self.assertEqual(len(self.top.get_identifiers()),
327323
len(self.top.get_symbols()))
@@ -347,8 +343,6 @@ def test_namespaces(self):
347343
self.assertEqual(len(ns_test_2.get_namespaces()), 0)
348344
self.assertRaises(ValueError, ns_test_2.get_namespace)
349345

350-
# TODO: RUSTPYTHON
351-
@unittest.expectedFailure
352346
def test_assigned(self):
353347
self.assertTrue(self.spam.lookup("x").is_assigned())
354348
self.assertTrue(self.spam.lookup("bar").is_assigned())
@@ -388,8 +382,6 @@ def test_annotated(self):
388382
def test_imported(self):
389383
self.assertTrue(self.top.lookup("sys").is_imported())
390384

391-
# TODO: RUSTPYTHON
392-
@unittest.expectedFailure
393385
def test_name(self):
394386
self.assertEqual(self.top.get_name(), "top")
395387
self.assertEqual(self.spam.get_name(), "spam")

vm/src/stdlib/symtable.rs

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ pub(crate) use symtable::make_module;
33
#[pymodule]
44
mod symtable {
55
use crate::{
6-
PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine, builtins::PyStrRef, compiler,
6+
PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
7+
builtins::{PyDictRef, PyStrRef},
8+
compiler,
79
};
810
use rustpython_codegen::symboltable::{Symbol, SymbolFlags, SymbolScope, SymbolTable};
911
use std::fmt;
@@ -182,28 +184,13 @@ mod symtable {
182184
}
183185

184186
#[pygetset]
185-
fn symbols(&self, vm: &VirtualMachine) -> PyResult<Vec<PyObjectRef>> {
186-
let symbols = self
187-
.symtable
188-
.symbols
189-
.values()
190-
.map(|s| {
191-
(PySymbol {
192-
symbol: s.clone(),
193-
namespaces: self
194-
.symtable
195-
.sub_tables
196-
.iter()
197-
.filter(|&table| table.name == s.name)
198-
.cloned()
199-
.collect(),
200-
is_top_scope: self.symtable.name == "top",
201-
})
202-
.into_ref(&vm.ctx)
203-
.into()
204-
})
205-
.collect();
206-
Ok(symbols)
187+
fn symbols(&self, vm: &VirtualMachine) -> PyResult<PyDictRef> {
188+
let dict = vm.ctx.new_dict();
189+
for (name, symbol) in &self.symtable.symbols {
190+
dict.set_item(name, vm.new_pyobj(symbol.flags.bits()), vm)
191+
.unwrap();
192+
}
193+
Ok(dict)
207194
}
208195
}
209196

0 commit comments

Comments
 (0)