Skip to content
This repository was archived by the owner on May 11, 2023. It is now read-only.

Commit 89e3587

Browse files
committed
Simplify repr implementation a bit
1 parent 96a9491 commit 89e3587

File tree

2 files changed

+22
-79
lines changed

2 files changed

+22
-79
lines changed

vm/src/builtins/code.rs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ impl Representable for PyCode {
230230
}
231231
}
232232

233-
#[pyclass(with(Py, Representable))]
233+
#[pyclass(with(Representable))]
234234
impl PyCode {
235235
#[pyslot]
236236
fn slot_new(_cls: PyTypeRef, _args: FuncArgs, vm: &VirtualMachine) -> PyResult {
@@ -418,29 +418,6 @@ impl PyCode {
418418
}
419419
}
420420

421-
#[pyclass(with(Representable))]
422-
impl Py<PyCode> {}
423-
424-
impl PyPayload for Py<PyCode> {
425-
fn class(ctx: &Context) -> &'static Py<PyType> {
426-
ctx.types.code_type
427-
}
428-
}
429-
430-
impl Representable for Py<PyCode> {
431-
#[inline]
432-
fn repr_str(zelf: &Py<Self>, _vm: &VirtualMachine) -> PyResult<String> {
433-
let code = &zelf.code;
434-
Ok(format!(
435-
"<code object {} at {:#x} file {:?}, line {}>",
436-
code.obj_name,
437-
zelf.get_id(),
438-
code.source_path.as_str(),
439-
code.first_line_number
440-
))
441-
}
442-
}
443-
444421
impl fmt::Display for PyCode {
445422
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
446423
(**self).fmt(f)

vm/src/stdlib/io.rs

Lines changed: 21 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ cfg_if::cfg_if! {
1212
use crate::{
1313
builtins::PyBaseExceptionRef,
1414
convert::{IntoPyException, ToPyException, ToPyObject},
15-
types::Representable,
1615
PyObjectRef, PyResult, TryFromObject, VirtualMachine,
1716
};
1817
pub use _io::io_open as open;
@@ -1526,6 +1525,24 @@ mod _io {
15261525
vm.call_method(self.lock(vm)?.check_init(vm)?, "isatty", ())
15271526
}
15281527

1528+
#[pyslot]
1529+
fn slot_repr(zelf: &PyObject, vm: &VirtualMachine) -> PyResult<PyStrRef> {
1530+
let name_repr = repr_fileobj_name(zelf, vm)?;
1531+
let cls = zelf.class();
1532+
let slot_name = cls.slot_name();
1533+
let repr = if let Some(name_repr) = name_repr {
1534+
format!("<{slot_name} name={name_repr}>")
1535+
} else {
1536+
format!("<{slot_name}>")
1537+
};
1538+
Ok(vm.ctx.new_str(repr))
1539+
}
1540+
1541+
#[pymethod(magic)]
1542+
fn repr(zelf: PyObjectRef, vm: &VirtualMachine) -> PyResult<PyStrRef> {
1543+
Self::slot_repr(&zelf, vm)
1544+
}
1545+
15291546
fn close_strict(&self, vm: &VirtualMachine) -> PyResult {
15301547
let mut data = self.lock(vm)?;
15311548
let raw = data.check_init(vm)?;
@@ -1672,28 +1689,13 @@ mod _io {
16721689
}
16731690

16741691
#[pyclass(
1675-
with(DefaultConstructor, BufferedMixin, BufferedReadable, Representable),
1692+
with(DefaultConstructor, BufferedMixin, BufferedReadable),
16761693
flags(BASETYPE, HAS_DICT)
16771694
)]
16781695
impl BufferedReader {}
16791696

16801697
impl DefaultConstructor for BufferedReader {}
16811698

1682-
impl Representable for BufferedReader {
1683-
#[inline]
1684-
fn repr_str(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<String> {
1685-
let name_repr = repr_fileobj_name(zelf.as_object(), vm)?;
1686-
let cls = zelf.class();
1687-
let slot_name = cls.slot_name();
1688-
let repr = if let Some(name_repr) = name_repr {
1689-
format!("<{slot_name} name={name_repr}>")
1690-
} else {
1691-
format!("<{slot_name}>")
1692-
};
1693-
Ok(repr)
1694-
}
1695-
}
1696-
16971699
#[pyclass]
16981700
trait BufferedWritable: PyPayload {
16991701
type Writer: BufferedMixin;
@@ -1737,28 +1739,13 @@ mod _io {
17371739
}
17381740

17391741
#[pyclass(
1740-
with(DefaultConstructor, BufferedMixin, BufferedWritable, Representable),
1742+
with(DefaultConstructor, BufferedMixin, BufferedWritable),
17411743
flags(BASETYPE, HAS_DICT)
17421744
)]
17431745
impl BufferedWriter {}
17441746

17451747
impl DefaultConstructor for BufferedWriter {}
17461748

1747-
impl Representable for BufferedWriter {
1748-
#[inline]
1749-
fn repr_str(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<String> {
1750-
let name_repr = repr_fileobj_name(zelf.as_object(), vm)?;
1751-
let cls = zelf.class();
1752-
let slot_name = cls.slot_name();
1753-
let repr = if let Some(name_repr) = name_repr {
1754-
format!("<{slot_name} name={name_repr}>")
1755-
} else {
1756-
format!("<{slot_name}>")
1757-
};
1758-
Ok(repr)
1759-
}
1760-
}
1761-
17621749
#[pyattr]
17631750
#[pyclass(name = "BufferedRandom", base = "_BufferedIOBase")]
17641751
#[derive(Debug, Default, PyPayload)]
@@ -1788,34 +1775,13 @@ mod _io {
17881775
}
17891776

17901777
#[pyclass(
1791-
with(
1792-
DefaultConstructor,
1793-
BufferedMixin,
1794-
BufferedReadable,
1795-
BufferedWritable,
1796-
Representable
1797-
),
1778+
with(DefaultConstructor, BufferedMixin, BufferedReadable, BufferedWritable),
17981779
flags(BASETYPE, HAS_DICT)
17991780
)]
18001781
impl BufferedRandom {}
18011782

18021783
impl DefaultConstructor for BufferedRandom {}
18031784

1804-
impl Representable for BufferedRandom {
1805-
#[inline]
1806-
fn repr_str(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<String> {
1807-
let name_repr = repr_fileobj_name(zelf.as_object(), vm)?;
1808-
let cls = zelf.class();
1809-
let slot_name = cls.slot_name();
1810-
let repr = if let Some(name_repr) = name_repr {
1811-
format!("<{slot_name} name={name_repr}>")
1812-
} else {
1813-
format!("<{slot_name}>")
1814-
};
1815-
Ok(repr)
1816-
}
1817-
}
1818-
18191785
#[pyattr]
18201786
#[pyclass(name = "BufferedRWPair", base = "_BufferedIOBase")]
18211787
#[derive(Debug, Default, PyPayload)]

0 commit comments

Comments
 (0)