]> granicus.if.org Git - python/commitdiff
#11983: update comment to describe which fields are used and why.
authorAndrew Kuchling <amk@amk.ca>
Mon, 14 Apr 2014 18:19:52 +0000 (14:19 -0400)
committerAndrew Kuchling <amk@amk.ca>
Mon, 14 Apr 2014 18:19:52 +0000 (14:19 -0400)
Original patch by Caelyn McAulay; modified after discussion w/ her at
the PyCon 2014 sprints.

Include/code.h

index 7c7e5bf8dc73b865cc838a61de01e463d98d1458..ff2b97efe9270444bc0bfb9ddd2b80109185d344 100644 (file)
@@ -21,7 +21,12 @@ typedef struct {
     PyObject *co_varnames;     /* tuple of strings (local variable names) */
     PyObject *co_freevars;     /* tuple of strings (free variable names) */
     PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
-    /* The rest doesn't count for hash or comparisons */
+    /* The rest aren't used in either hash or comparisons, except for
+       co_name (used in both) and co_firstlineno (used only in
+       comparisons).  This is done to preserve the name and line number
+       for tracebacks and debuggers; otherwise, constant de-duplication
+       would collapse identical functions/lambdas defined on different lines.
+    */
     unsigned char *co_cell2arg; /* Maps cell vars which are arguments. */
     PyObject *co_filename;     /* unicode (where it was loaded from) */
     PyObject *co_name;         /* unicode (name, for reference) */