#1473257: add generator.gi_code attribute that refers to
the original code object backing the generator. Patch by Collin Winter.
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 4ef710b..3868295 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -11,6 +11,7 @@
 gen_traverse(PyGenObject *gen, visitproc visit, void *arg)
 {
 	Py_VISIT((PyObject *)gen->gi_frame);
+	Py_VISIT(gen->gi_code);
 	return 0;
 }
 
@@ -35,6 +36,7 @@
 
 	_PyObject_GC_UNTRACK(self);
 	Py_CLEAR(gen->gi_frame);
+	Py_CLEAR(gen->gi_code);
 	PyObject_GC_Del(gen);
 }
 
@@ -282,6 +284,7 @@
 static PyMemberDef gen_memberlist[] = {
 	{"gi_frame",	T_OBJECT, offsetof(PyGenObject, gi_frame),	RO},
 	{"gi_running",	T_INT,    offsetof(PyGenObject, gi_running),	RO},
+        {"gi_code",     T_OBJECT, offsetof(PyGenObject, gi_code),  RO},
 	{NULL}	/* Sentinel */
 };
 
@@ -352,6 +355,8 @@
 		return NULL;
 	}
 	gen->gi_frame = f;
+	Py_INCREF(f->f_code);
+	gen->gi_code = (PyObject *)(f->f_code);
 	gen->gi_running = 0;
 	gen->gi_weakreflist = NULL;
 	_PyObject_GC_TRACK(gen);