[Python-checkins] python/dist/src/Include object.h,2.107,2.108

jhylton@users.sourceforge.net jhylton@users.sourceforge.net
Wed, 17 Jul 2002 09:31:06 -0700


Update of /cvsroot/python/python/dist/src/Include
In directory usw-pr-cvs1:/tmp/cvs-serv17711/Include

Modified Files:
	object.h 
Log Message:
staticforward bites the dust.

The staticforward define was needed to support certain broken C
compilers (notably SCO ODT 3.0, perhaps early AIX as well) botched the
static keyword when it was used with a forward declaration of a static
initialized structure.  Standard C allows the forward declaration with
static, and we've decided to stop catering to broken C compilers.  (In
fact, we expect that the compilers are all fixed eight years later.)

I'm leaving staticforward and statichere defined in object.h as
static.  This is only for backwards compatibility with C extensions
that might still use it.

XXX I haven't updated the documentation.



Index: object.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/object.h,v
retrieving revision 2.107
retrieving revision 2.108
diff -C2 -d -r2.107 -r2.108
*** object.h	11 Jul 2002 06:23:49 -0000	2.107
--- object.h	17 Jul 2002 16:30:34 -0000	2.108
***************
*** 617,642 ****
  
  /*
! A common programming style in Python requires the forward declaration
! of static, initialized structures, e.g. for a type object that is used
! by the functions whose address must be used in the initializer.
! Some compilers (notably SCO ODT 3.0, I seem to remember early AIX as
! well) botch this if you use the static keyword for both declarations
! (they allocate two objects, and use the first, uninitialized one until
! the second declaration is encountered).  Therefore, the forward
! declaration should use the 'forwardstatic' keyword.  This expands to
! static on most systems, but to extern on a few.  The actual storage
! and name will still be static because the second declaration is
! static, so no linker visible symbols will be generated.  (Standard C
! compilers take offense to the extern forward declaration of a static
! object, so I can't just put extern in all cases. :-( )
  */
  
- #ifdef BAD_STATIC_FORWARD
- #define staticforward extern
- #define statichere static
- #else /* !BAD_STATIC_FORWARD */
  #define staticforward static
  #define statichere static
- #endif /* !BAD_STATIC_FORWARD */
  
  
--- 617,633 ----
  
  /*
! Define staticforward and statichere for source compatibility with old
! C extensions.
! 
! The staticforward define was needed to support certain broken C
! compilers (notably SCO ODT 3.0, perhaps early AIX as well) botched the
! static keyword when it was used with a forward declaration of a static
! initialized structure.  Standard C allows the forward declaration with
! static, and we've decided to stop catering to broken C compilers.
! (In fact, we expect that the compilers are all fixed eight years later.)
  */
  
  #define staticforward static
  #define statichere static