diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-07-17 16:30:39 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-07-17 16:30:39 (GMT) |
commit | 938ace69a0e112424a2f426a4881d1fd1fc922d2 (patch) | |
tree | 29d42e42ec17a6ba2124b6fa36c3f00b23534413 /Include/object.h | |
parent | 9cb64b954ae1bc3f0caeba98227de64cb6873026 (diff) | |
download | cpython-938ace69a0e112424a2f426a4881d1fd1fc922d2.zip cpython-938ace69a0e112424a2f426a4881d1fd1fc922d2.tar.gz cpython-938ace69a0e112424a2f426a4881d1fd1fc922d2.tar.bz2 |
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.
Diffstat (limited to 'Include/object.h')
-rw-r--r-- | Include/object.h | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/Include/object.h b/Include/object.h index 736095a..3397662 100644 --- a/Include/object.h +++ b/Include/object.h @@ -616,28 +616,19 @@ extern DL_IMPORT(PyObject) _Py_NotImplementedStruct; /* Don't use this directly #define Py_GE 5 /* -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. :-( ) +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.) */ -#ifdef BAD_STATIC_FORWARD -#define staticforward extern -#define statichere static -#else /* !BAD_STATIC_FORWARD */ #define staticforward static #define statichere static -#endif /* !BAD_STATIC_FORWARD */ /* |