Skip to content

Commit b052d64

Browse files
committed
clean up PyCode
1 parent 174ef52 commit b052d64

1 file changed

Lines changed: 33 additions & 21 deletions

File tree

vm/src/builtins/code.rs

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
convert::ToPyObject,
1111
function::{FuncArgs, OptionalArg},
1212
types::Representable,
13-
AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
13+
AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyResult, VirtualMachine,
1414
};
1515
use num_traits::Zero;
1616
use std::{borrow::Borrow, fmt, ops::Deref};
@@ -216,9 +216,6 @@ impl PyPayload for PyCode {
216216
}
217217
}
218218

219-
#[pyclass(with(PyRef, Representable))]
220-
impl PyCode {}
221-
222219
impl Representable for PyCode {
223220
#[inline]
224221
fn repr_str(zelf: &Py<Self>, _vm: &VirtualMachine) -> PyResult<String> {
@@ -233,35 +230,35 @@ impl Representable for PyCode {
233230
}
234231
}
235232

236-
#[pyclass]
237-
impl PyRef<PyCode> {
233+
#[pyclass(with(Py))]
234+
impl PyCode {
238235
#[pyslot]
239236
fn slot_new(_cls: PyTypeRef, _args: FuncArgs, vm: &VirtualMachine) -> PyResult {
240237
Err(vm.new_type_error("Cannot directly create code object".to_owned()))
241238
}
242239

243240
#[pygetset]
244-
fn co_posonlyargcount(self) -> usize {
241+
fn co_posonlyargcount(&self) -> usize {
245242
self.code.posonlyarg_count as usize
246243
}
247244

248245
#[pygetset]
249-
fn co_argcount(self) -> usize {
246+
fn co_argcount(&self) -> usize {
250247
self.code.arg_count as usize
251248
}
252249

253250
#[pygetset]
254-
fn co_stacksize(self) -> u32 {
251+
fn co_stacksize(&self) -> u32 {
255252
self.code.max_stackdepth
256253
}
257254

258255
#[pygetset]
259-
pub fn co_filename(self) -> PyStrRef {
256+
pub fn co_filename(&self) -> PyStrRef {
260257
self.code.source_path.to_owned()
261258
}
262259

263260
#[pygetset]
264-
pub fn co_cellvars(self, vm: &VirtualMachine) -> PyTupleRef {
261+
pub fn co_cellvars(&self, vm: &VirtualMachine) -> PyTupleRef {
265262
let cellvars = self
266263
.code
267264
.cellvars
@@ -273,33 +270,33 @@ impl PyRef<PyCode> {
273270
}
274271

275272
#[pygetset]
276-
fn co_nlocals(self) -> usize {
273+
fn co_nlocals(&self) -> usize {
277274
self.varnames.len()
278275
}
279276

280277
#[pygetset]
281-
fn co_firstlineno(self) -> usize {
278+
fn co_firstlineno(&self) -> usize {
282279
self.code.first_line_number as usize
283280
}
284281

285282
#[pygetset]
286-
fn co_kwonlyargcount(self) -> usize {
283+
fn co_kwonlyargcount(&self) -> usize {
287284
self.code.kwonlyarg_count as usize
288285
}
289286

290287
#[pygetset]
291-
fn co_consts(self, vm: &VirtualMachine) -> PyTupleRef {
288+
fn co_consts(&self, vm: &VirtualMachine) -> PyTupleRef {
292289
let consts = self.code.constants.iter().map(|x| x.0.clone()).collect();
293290
vm.ctx.new_tuple(consts)
294291
}
295292

296293
#[pygetset]
297-
fn co_name(self) -> PyStrRef {
294+
fn co_name(&self) -> PyStrRef {
298295
self.code.obj_name.to_owned()
299296
}
300297

301298
#[pygetset]
302-
fn co_names(self, vm: &VirtualMachine) -> PyTupleRef {
299+
fn co_names(&self, vm: &VirtualMachine) -> PyTupleRef {
303300
let names = self
304301
.code
305302
.names
@@ -311,18 +308,18 @@ impl PyRef<PyCode> {
311308
}
312309

313310
#[pygetset]
314-
fn co_flags(self) -> u16 {
311+
fn co_flags(&self) -> u16 {
315312
self.code.flags.bits()
316313
}
317314

318315
#[pygetset]
319-
pub fn co_varnames(self, vm: &VirtualMachine) -> PyTupleRef {
316+
pub fn co_varnames(&self, vm: &VirtualMachine) -> PyTupleRef {
320317
let varnames = self.code.varnames.iter().map(|s| s.to_object()).collect();
321318
vm.ctx.new_tuple(varnames)
322319
}
323320

324321
#[pygetset]
325-
pub fn co_freevars(self, vm: &VirtualMachine) -> PyTupleRef {
322+
pub fn co_freevars(&self, vm: &VirtualMachine) -> PyTupleRef {
326323
let names = self
327324
.code
328325
.freevars
@@ -334,7 +331,7 @@ impl PyRef<PyCode> {
334331
}
335332

336333
#[pymethod]
337-
pub fn replace(self, args: ReplaceArgs, vm: &VirtualMachine) -> PyResult<PyCode> {
334+
pub fn replace(&self, args: ReplaceArgs, vm: &VirtualMachine) -> PyResult<PyCode> {
338335
let posonlyarg_count = match args.co_posonlyargcount {
339336
OptionalArg::Present(posonlyarg_count) => posonlyarg_count,
340337
OptionalArg::Missing => self.code.posonlyarg_count,
@@ -421,6 +418,21 @@ impl PyRef<PyCode> {
421418
}
422419
}
423420

421+
#[pyclass]
422+
impl Py<PyCode> {
423+
#[pymethod(magic)]
424+
fn repr(&self) -> String {
425+
let code = &self.code;
426+
format!(
427+
"<code object {} at {:#x} file {:?}, line {}>",
428+
code.obj_name,
429+
self.get_id(),
430+
code.source_path.as_str(),
431+
code.first_line_number
432+
)
433+
}
434+
}
435+
424436
impl fmt::Display for PyCode {
425437
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
426438
(**self).fmt(f)

0 commit comments

Comments
 (0)