Skip to content

Commit 6eea407

Browse files
generator
1 parent 53e4591 commit 6eea407

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

vm/src/obj/objgenerator.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,22 @@
44

55
use crate::frame::{ExecutionResult, Frame};
66
use crate::pyobject::{
7-
PyContext, PyFuncArgs, PyObject, PyObjectPayload, PyObjectRef, PyResult, TypeProtocol,
7+
PyContext, PyFuncArgs, PyObject, PyObjectPayload, PyObjectPayload2, PyObjectRef, PyResult,
8+
TypeProtocol,
89
};
910
use crate::vm::VirtualMachine;
1011

12+
#[derive(Debug)]
13+
pub struct PyGenerator {
14+
frame: PyObjectRef,
15+
}
16+
17+
impl PyObjectPayload2 for PyGenerator {
18+
fn required_type(ctx: &PyContext) -> PyObjectRef {
19+
ctx.generator_type()
20+
}
21+
}
22+
1123
pub fn init(context: &PyContext) {
1224
let generator_type = &context.generator_type;
1325
context.set_attr(
@@ -29,7 +41,9 @@ pub fn init(context: &PyContext) {
2941

3042
pub fn new_generator(vm: &mut VirtualMachine, frame: PyObjectRef) -> PyResult {
3143
Ok(PyObject::new(
32-
PyObjectPayload::Generator { frame },
44+
PyObjectPayload::AnyRustValue {
45+
value: Box::new(PyGenerator { frame }),
46+
},
3347
vm.ctx.generator_type.clone(),
3448
))
3549
}
@@ -55,7 +69,7 @@ fn generator_send(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
5569
}
5670

5771
fn send(vm: &mut VirtualMachine, gen: &PyObjectRef, value: &PyObjectRef) -> PyResult {
58-
if let PyObjectPayload::Generator { ref frame } = gen.payload {
72+
if let Some(PyGenerator { ref frame }) = gen.payload() {
5973
if let Some(frame) = frame.payload::<Frame>() {
6074
frame.push_value(value.clone());
6175
} else {

vm/src/pyobject.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,9 +1508,6 @@ pub enum PyObjectPayload {
15081508
MemoryView {
15091509
obj: PyObjectRef,
15101510
},
1511-
Generator {
1512-
frame: PyObjectRef,
1513-
},
15141511
WeakRef {
15151512
referent: PyObjectWeakRef,
15161513
},
@@ -1534,7 +1531,6 @@ impl fmt::Debug for PyObjectPayload {
15341531
PyObjectPayload::WeakRef { .. } => write!(f, "weakref"),
15351532
PyObjectPayload::Iterator { .. } => write!(f, "iterator"),
15361533
PyObjectPayload::Slice { .. } => write!(f, "slice"),
1537-
PyObjectPayload::Generator { .. } => write!(f, "generator"),
15381534
PyObjectPayload::AnyRustValue { value } => value.fmt(f),
15391535
}
15401536
}

0 commit comments

Comments
 (0)