From d38e89a8112e7344afb1e75ffcdac6feb7d6d05c Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Tue, 19 Mar 2019 16:28:53 +0000 Subject: [PATCH] Remove PyObject::new from objgenerator. --- vm/src/obj/objgenerator.rs | 10 ++++------ vm/src/vm.rs | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/vm/src/obj/objgenerator.rs b/vm/src/obj/objgenerator.rs index 611b89150..2fe08c138 100644 --- a/vm/src/obj/objgenerator.rs +++ b/vm/src/obj/objgenerator.rs @@ -4,13 +4,14 @@ use crate::frame::{ExecutionResult, Frame}; use crate::function::PyFuncArgs; -use crate::pyobject::{PyContext, PyObject, PyObjectRef, PyResult, PyValue, TypeProtocol}; +use crate::pyobject::{PyContext, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol}; use crate::vm::VirtualMachine; #[derive(Debug)] pub struct PyGenerator { frame: PyObjectRef, } +type PyGeneratorRef = PyRef; impl PyValue for PyGenerator { fn class(vm: &mut VirtualMachine) -> PyObjectRef { @@ -37,11 +38,8 @@ pub fn init(context: &PyContext) { ); } -pub fn new_generator(vm: &mut VirtualMachine, frame: PyObjectRef) -> PyResult { - Ok(PyObject::new( - PyGenerator { frame }, - vm.ctx.generator_type.clone(), - )) +pub fn new_generator(frame: PyObjectRef, vm: &mut VirtualMachine) -> PyGeneratorRef { + PyGenerator { frame }.into_ref(vm) } fn generator_iter(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { diff --git a/vm/src/vm.rs b/vm/src/vm.rs index 49bc2f9e2..3b3799d0f 100644 --- a/vm/src/vm.rs +++ b/vm/src/vm.rs @@ -353,7 +353,7 @@ impl VirtualMachine { // If we have a generator, create a new generator if code_object.is_generator { - objgenerator::new_generator(self, frame) + Ok(objgenerator::new_generator(frame, self).into_object()) } else { self.run_frame_full(frame) }