PyObject *Nuitka_Generator_New( generator_code code, PyObject *name, PyObject *qualname, PyCodeObject *code_object, PyCellObject **closure, Py_ssize_t closure_given ) #endif { struct Nuitka_GeneratorObject *result = PyObject_GC_New( struct Nuitka_GeneratorObject, &Nuitka_Generator_Type ); assert( result != NULL ); result->m_code = (void *)code; CHECK_OBJECT( name ); result->m_name = name; Py_INCREF( name ); #if PYTHON_VERSION >= 350 CHECK_OBJECT( qualname ); result->m_qualname = qualname; Py_INCREF( qualname ); result->m_yieldfrom = NULL; #endif // We take ownership of those and received the reference count from the // caller. result->m_closure = closure; result->m_closure_given = closure_given; result->m_weakrefs = NULL; result->m_status = status_Unused; result->m_running = false; result->m_exception_type = NULL; result->m_exception_value = NULL; result->m_exception_tb = NULL; result->m_yielded = NULL; result->m_frame = NULL; result->m_code_object = code_object; initFiber( &result->m_yielder_context ); Nuitka_GC_Track( result ); return (PyObject *)result; }
PyObject *Nuitka_Generator_New( yielder_func code, PyObject *name, PyCodeObject *code_object, void *context, releaser cleanup ) { Nuitka_GeneratorObject *result = PyObject_GC_New( Nuitka_GeneratorObject, &Nuitka_Generator_Type ); if (unlikely( result == NULL )) { PyErr_Format( PyExc_RuntimeError, "cannot create genexpr %s", Nuitka_String_AsString( name ) ); return NULL; } result->m_code = (void *)code; result->m_name = INCREASE_REFCOUNT( name ); result->m_context = context; result->m_cleanup = cleanup; result->m_weakrefs = NULL; result->m_status = status_Unused; result->m_running = false; result->m_exception_type = NULL; result->m_exception_value = NULL; result->m_exception_tb = NULL; result->m_yielded = NULL; result->m_frame = NULL; result->m_code_object = code_object; initFiber( &result->m_yielder_context ); Nuitka_GC_Track( result ); return (PyObject *)result; }