On Thu, 11 Oct 2001, Tim Peters wrote: >[Tim] >> My head hurts, so I'm not sure this is strictly legit C >> (drop-in replacement for the current PyGC_Head declaration): >> >> /* GC information is stored BEFORE the object structure */ >> typedef union _gc_head { >> struct { >> union _gc_head *gc_next; /* not NULL if object is tracked */ >> union _gc_head *gc_prev; >> int gc_refs; >> }; >> double dummy; /* force worst-case alignment */ >> } PyGC_Head; > >[Guido] >> Alas, gcc gives me warnings about this: >> >> ../Include/objimpl.h:274: warning: unnamed struct/union that >> defines no instances >> >> and references to the fields fail with errors: >> >> ../Objects/cellobject.c: In function `PyCell_New': >> ../Objects/cellobject.c:14: union has no member named `gc_next' >> [and many more] > >Then: > > If that's not legit, we could make it legit by naming the struct > member and interpolating the name into all existing references. > >This is straightforward, if a bit tedious ... OK, I did that. Requires >changes to the track and untrack macros, plus a ton of edits inside >gcmodule.c. But that's it, and they're all straightforward changes (i.e., >low chance of breakage). Should I check it in? The usual thing to do in this situation would be: typedef union _gc_head { struct { union _gc_head *internal_gc_next; union _gc_head *internal_gc_prev; int internal_gc_refs; } gc_internals; double dummy; /* force worst-case alignment */ } PyGC_Head; #define gc_next gc_internals.internal_gc_head #define gc_next gc_internals.internal_gc_head #define gc_refs gc_internals.internal_gc_refs No need to change any other code. /Paul
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4