]> granicus.if.org Git - python/commitdiff
staticforward bites the dust.
authorJeremy Hylton <jeremy@alum.mit.edu>
Wed, 17 Jul 2002 16:30:39 +0000 (16:30 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Wed, 17 Jul 2002 16:30:39 +0000 (16:30 +0000)
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.

61 files changed:
Include/object.h
Mac/Lib/test/mkcwproj/mkcwtestmodule.c
Mac/Modules/Nav.c
Mac/Modules/calldll.c
Mac/Modules/ctbmodule.c
Mac/Modules/ctl/_Ctlmodule.c
Mac/Modules/hfsplusmodule.c
Mac/Modules/icgluemodule.c
Mac/Modules/macfsmodule.c
Mac/Modules/macosmodule.c
Mac/Modules/macspeechmodule.c
Mac/Modules/mlte/_Mltemodule.c
Mac/Modules/qd/_Qdmodule.c
Mac/Modules/snd/_Sndmodule.c
Mac/Modules/waste/wastemodule.c
Mac/Python/macgetpath.c
Modules/_sre.c
Modules/_ssl.c
Modules/_tkinter.c
Modules/almodule.c
Modules/arraymodule.c
Modules/bsddbmodule.c
Modules/cPickle.c
Modules/cmathmodule.c
Modules/dbmmodule.c
Modules/dlmodule.c
Modules/flmodule.c
Modules/fmmodule.c
Modules/gdbmmodule.c
Modules/linuxaudiodev.c
Modules/md5module.c
Modules/mpzmodule.c
Modules/parsermodule.c
Modules/pcremodule.c
Modules/pyexpat.c
Modules/rotormodule.c
Modules/selectmodule.c
Modules/shamodule.c
Modules/socketmodule.c
Modules/sunaudiodev.c
Modules/threadmodule.c
Modules/xreadlinesmodule.c
Modules/xxmodule.c
Modules/xxsubtype.c
Modules/zlibmodule.c
Objects/dictobject.c
Objects/floatobject.c
Objects/intobject.c
Objects/listobject.c
Objects/longobject.c
Objects/rangeobject.c
Objects/stringobject.c
Objects/tupleobject.c
Objects/typeobject.c
Objects/unicodeobject.c
Objects/xxobject.c
Python/ceval.c
Tools/bgen/bgen/bgenObjectDefinition.py
Tools/modulator/Templates/object_head
configure
configure.in

index 736095a7668e868f7923bd7a430b4176b06a3c04..3397662f0355cc752ab599551a1a9dd9f6fdb1b7 100644 (file)
@@ -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 */
 
 
 /*
index ad8099b37936b1998f39509f9ffde14799267a04..84d0e2d3bcfb291f50794ec01526a0d1ef62e744 100644 (file)
@@ -23,7 +23,7 @@ typedef struct {
        PyObject        *x_attr;        /* Attributes dictionary */
 } XxoObject;
 
-staticforward PyTypeObject Xxo_Type;
+static PyTypeObject Xxo_Type;
 
 #define XxoObject_Check(v)     ((v)->ob_type == &Xxo_Type)
 
index fb0c21b02e84323d936f09e7efca743b9952b047..7dfe3e5b196eaf5136f419f004a59b69637d1693 100644 (file)
@@ -233,7 +233,7 @@ typedef struct {
        NavReplyRecord itself;
 } navrrobject;
 
-staticforward PyTypeObject Navrrtype;
+static PyTypeObject Navrrtype;
 
 
 
index e2c2e3ebebac0fcadc615c2491307fbf144f8284..f390a9de97f2bd7b07ff424cf455898ab149d11f 100644 (file)
@@ -471,7 +471,7 @@ typedef struct {
        char name[MAXNAME+1];
 } cdfobject;
 
-staticforward PyTypeObject Cdftype;
+static PyTypeObject Cdftype;
 
 
 
@@ -485,7 +485,7 @@ typedef struct {
        char name[MAXNAME+1];
 } cdrobject;
 
-staticforward PyTypeObject Cdrtype;
+static PyTypeObject Cdrtype;
 
 
 
@@ -503,7 +503,7 @@ typedef struct {
        conventry *argconv[MAXARG];     /* Value converter list */
 } cdcobject;
 
-staticforward PyTypeObject Cdctype;
+static PyTypeObject Cdctype;
 
 
 
index 3dc8f0f5d89da4e3deece3b7a422a493c1d36131..f8bc25e7c5a686146e797799fdd0f42c7257dff1 100644 (file)
@@ -80,7 +80,7 @@ typedef struct {
        int err;                        /* Error to pass to the callback */
 } ctbcmobject;
 
-staticforward PyTypeObject ctbcmtype;
+static PyTypeObject ctbcmtype;
 
 #define is_ctbcmobject(v)              ((v)->ob_type == &ctbcmtype)
 
index c9a8aa4f0acc8b17379944b8328d2f68ed970c8a..cde42b72332ba6b6730e6f64816c8c125db91f77 100644 (file)
@@ -35,7 +35,7 @@ extern int _CtlObj_Convert(PyObject *, ControlHandle *);
 #define CtlObj_Convert _CtlObj_Convert
 #endif
 
-staticforward PyObject *CtlObj_WhichControl(ControlHandle);
+static PyObject *CtlObj_WhichControl(ControlHandle);
 
 #define as_Control(h) ((ControlHandle)h)
 #define as_Resource(ctl) ((Handle)ctl)
@@ -139,9 +139,9 @@ static ControlUserPaneIdleUPP myidleproc_upp;
 static ControlUserPaneHitTestUPP myhittestproc_upp;
 static ControlUserPaneTrackingUPP mytrackingproc_upp;
 
-staticforward int settrackfunc(PyObject *);    /* forward */
-staticforward void clrtrackfunc(void); /* forward */
-staticforward int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *);
+static int settrackfunc(PyObject *);   /* forward */
+static void clrtrackfunc(void);        /* forward */
+static int setcallback(PyObject *, OSType, PyObject *, UniversalProcPtr *);
 
 static PyObject *Ctl_Error;
 
index 4135cd086eb448c347ead1cf620b1e2596944ba6..1c690311df873d3bb391a461c467314cae8b1647 100644 (file)
@@ -43,7 +43,7 @@ typedef struct {
        short           forkref;
 } forkRefObject;
 
-staticforward PyTypeObject forkRefObject_Type;
+static PyTypeObject forkRefObject_Type;
 
 #define forkRefObject_Check(v) ((v)->ob_type == &forkRefObject_Type)
 
@@ -359,7 +359,7 @@ typedef struct {
        FSIterator      iterator;
 } iteratorObject;
 
-staticforward PyTypeObject iteratorObject_Type;
+static PyTypeObject iteratorObject_Type;
 
 #define iteratorObject_Check(v)        ((v)->ob_type == &iteratorObject_Type)
 
@@ -534,7 +534,7 @@ typedef struct {
        Boolean         directory;
 } fsRefObject;
 
-staticforward PyTypeObject fsRefObject_Type;
+static PyTypeObject fsRefObject_Type;
 
 #define fsRefObject_Check(v)   ((v)->ob_type == &fsRefObject_Type)
 
index 1368ff2490ea5747712939fea7d51404665ead18..c974a0c10f4b520ffcaf4b151da9694c0de6b700 100644 (file)
@@ -61,7 +61,7 @@ typedef struct {
        ICInstance inst;
 } iciobject;
 
-staticforward PyTypeObject Icitype;
+static PyTypeObject Icitype;
 
 
 
index a251811a3a986f5624cfb8047387fd018b95c42d..488dd7e678f852832b0a0d3e2d98bff0262d4643 100644 (file)
@@ -70,7 +70,7 @@ typedef struct {
        AliasHandle alias;
 } mfsaobject;
 
-staticforward PyTypeObject Mfsatype;
+static PyTypeObject Mfsatype;
 
 #define is_mfsaobject(v)               ((v)->ob_type == &Mfsatype)
 
@@ -82,7 +82,7 @@ typedef struct {
        FSSpec fsspec;
 } mfssobject;
 
-staticforward PyTypeObject Mfsstype;
+static PyTypeObject Mfsstype;
 
 #define is_mfssobject(v)               ((v)->ob_type == &Mfsstype)
 
@@ -94,7 +94,7 @@ typedef struct {
        FSRef fsref;
 } mfsrobject;
 
-staticforward PyTypeObject Mfsrtype;
+static PyTypeObject Mfsrtype;
 
 #define is_mfsrobject(v)               ((v)->ob_type == &Mfsrtype)
 
@@ -107,13 +107,13 @@ typedef struct {
        FInfo finfo;
 } mfsiobject;
 
-staticforward PyTypeObject Mfsitype;
+static PyTypeObject Mfsitype;
 
 #define is_mfsiobject(v)               ((v)->ob_type == &Mfsitype)
 
 
-staticforward mfssobject *newmfssobject(FSSpec *fss); /* Forward */
-staticforward mfsrobject *newmfsrobject(FSRef *fsr); /* Forward */
+static mfssobject *newmfssobject(FSSpec *fss); /* Forward */
+static mfsrobject *newmfsrobject(FSRef *fsr); /* Forward */
 
 /* ---------------------------------------------------------------- */
 
index 671d67dea19391506a7f5117b355d5ce19c8465d..dc9a94ff383636272bed1c02df548d44818330c1 100644 (file)
@@ -60,7 +60,7 @@ typedef struct {
        int isclosed;
 } rfobject;
 
-staticforward PyTypeObject Rftype;
+static PyTypeObject Rftype;
 
 
 
index b8bed57fb42ba005c029b69b71511b62642780c0..a8388e9006b2b552b78be385e5eb83bc15a90f16 100644 (file)
@@ -88,7 +88,7 @@ typedef struct {
        PyObject *curtext;      /* If non-NULL current text being spoken */
 } scobject;
 
-staticforward PyTypeObject sctype;
+static PyTypeObject sctype;
 
 #define is_scobject(v)         ((v)->ob_type == &sctype)
 
@@ -285,7 +285,7 @@ typedef struct {
        VoiceDescription vd;
 } mvobject;
 
-staticforward PyTypeObject mvtype;
+static PyTypeObject mvtype;
 
 #define is_mvobject(v)         ((v)->ob_type == &mvtype)
 
index ec512aa6cd2939aac7c65ddb5b64a53ff0d182a0..12ef25a380efe27ced721b0013535b2ccfce42bb 100644 (file)
 #endif
 
 /* For now we declare them forward here. They'll go to mactoolbox later */
-staticforward PyObject *TXNObj_New(TXNObject);
-staticforward int TXNObj_Convert(PyObject *, TXNObject *);
-staticforward PyObject *TXNFontMenuObj_New(TXNFontMenuObject);
-staticforward int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *);
+static PyObject *TXNObj_New(TXNObject);
+static int TXNObj_Convert(PyObject *, TXNObject *);
+static PyObject *TXNFontMenuObj_New(TXNFontMenuObject);
+static int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *);
 
 // ADD declarations
 #ifdef NOTYET_USE_TOOLBOX_OBJECT_GLUE
index b174e025c36ff6a7a891330eaee23be5e36b720d..f7956b896588c9ae9cf87594d01987b20bf7b30f 100644 (file)
@@ -111,7 +111,7 @@ extern int _QdRGB_Convert(PyObject *, RGBColorPtr);
 #define QDIsPortBuffered(port) 0
 #endif /* !TARGET_API_MAC_CARBON  */
 
-staticforward PyObject *BMObj_NewCopied(BitMapPtr);
+static PyObject *BMObj_NewCopied(BitMapPtr);
 
 /*
 ** Parse/generate RGB records
@@ -527,7 +527,7 @@ PyTypeObject BitMap_Type = {
 
 /* ------------------ Object type QDGlobalsAccess ------------------- */
 
-staticforward PyTypeObject QDGlobalsAccess_Type;
+static PyTypeObject QDGlobalsAccess_Type;
 
 #define QDGA_Check(x) ((x)->ob_type == &QDGlobalsAccess_Type)
 
@@ -631,7 +631,7 @@ static PyObject *QDGA_getattr(QDGlobalsAccessObject *self, char *name)
 
 #define QDGA_hash NULL
 
-staticforward PyTypeObject QDGlobalsAccess_Type = {
+static PyTypeObject QDGlobalsAccess_Type = {
        PyObject_HEAD_INIT(NULL)
        0, /*ob_size*/
        "_Qd.QDGlobalsAccess", /*tp_name*/
index 1308bba0ee3ccb2925327c7da84e55c6a47b8199..7a8f9fd27cd97a608ad69d76709563223167ac00 100644 (file)
@@ -62,7 +62,7 @@ static PyObject *Snd_Error;
 
 /* --------------------- Object type SndChannel --------------------- */
 
-staticforward PyTypeObject SndChannel_Type;
+static PyTypeObject SndChannel_Type;
 
 #define SndCh_Check(x) ((x)->ob_type == &SndChannel_Type)
 
@@ -315,7 +315,7 @@ static PyObject *SndCh_getattr(SndChannelObject *self, char *name)
 
 #define SndCh_hash NULL
 
-staticforward PyTypeObject SndChannel_Type = {
+static PyTypeObject SndChannel_Type = {
        PyObject_HEAD_INIT(NULL)
        0, /*ob_size*/
        "_Snd.SndChannel", /*tp_name*/
@@ -339,7 +339,7 @@ staticforward PyTypeObject SndChannel_Type = {
 
 /* ------------------------ Object type SPB ------------------------- */
 
-staticforward PyTypeObject SPB_Type;
+static PyTypeObject SPB_Type;
 
 #define SPBObj_Check(x) ((x)->ob_type == &SPB_Type)
 
@@ -443,7 +443,7 @@ static int SPBObj_setattr(SPBObject *self, char *name, PyObject *value)
 
 #define SPBObj_hash NULL
 
-staticforward PyTypeObject SPB_Type = {
+static PyTypeObject SPB_Type = {
        PyObject_HEAD_INIT(NULL)
        0, /*ob_size*/
        "_Snd.SPB", /*tp_name*/
index 0fd90d35d75c7b7691487f16626c64f5b109ad5f..a1eab0b84144ae9cb61648f061a0b903ffa6d39b 100644 (file)
@@ -33,8 +33,8 @@ extern PyObject *AEDesc_New(AppleEvent *);
 extern int AEDesc_Convert(PyObject *, AppleEvent *);
 
 /* Forward declaration */
-staticforward PyObject *WEOObj_New(WEObjectReference);
-staticforward PyObject *ExistingwasteObj_New(WEReference);
+static PyObject *WEOObj_New(WEObjectReference);
+static PyObject *ExistingwasteObj_New(WEReference);
 
 /*
 ** Parse/generate TextStyle records
index dfb689e3079fa5ecb56714b14be487fcc3f9530e..b79d55511f07772e4e79e259a5200adf421dcf8e 100644 (file)
@@ -64,7 +64,7 @@ PERFORMANCE OF THIS SOFTWARE.
 #include <Dialogs.h>
 
 #ifndef USE_BUILTIN_PATH
-staticforward char *PyMac_GetPythonPath();
+static char *PyMac_GetPythonPath();
 #endif
 
 #define PYTHONPATH "\
index 839763dc722e66a8cc0febd851b60903e43b5ebc..fdc8207def35c3d44ca6b1e65f814852979fbc4d 100644 (file)
@@ -1293,9 +1293,9 @@ SRE_LITERAL_TEMPLATE(SRE_CHAR* ptr, int len)
 
 /* see sre.h for object declarations */
 
-staticforward PyTypeObject Pattern_Type;
-staticforward PyTypeObject Match_Type;
-staticforward PyTypeObject Scanner_Type;
+static PyTypeObject Pattern_Type;
+static PyTypeObject Match_Type;
+static PyTypeObject Scanner_Type;
 
 static PyObject *
 _compile(PyObject* self_, PyObject* args)
index 13177918018dce3b70230d026927a09b16c58cf2..5f5e530487efd98def26040ebeade140c061823b 100644 (file)
@@ -61,9 +61,9 @@ typedef struct {
 
 } PySSLObject;
 
-staticforward PyTypeObject PySSL_Type;
-staticforward PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args);
-staticforward PyObject *PySSL_SSLread(PySSLObject *self, PyObject *args);
+static PyTypeObject PySSL_Type;
+static PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args);
+static PyObject *PySSL_SSLread(PySSLObject *self, PyObject *args);
 
 #define PySSLObject_Check(v)   ((v)->ob_type == &PySSL_Type)
 
@@ -354,7 +354,7 @@ static PyObject *PySSL_getattr(PySSLObject *self, char *name)
        return Py_FindMethod(PySSLMethods, (PyObject *)self, name);
 }
 
-staticforward PyTypeObject PySSL_Type = {
+static PyTypeObject PySSL_Type = {
        PyObject_HEAD_INIT(NULL)
        0,                              /*ob_size*/
        "socket.SSL",                   /*tp_name*/
index 788177f06e8169160a8a2d1e4404bd405a9eac3b..6c75a5d1dd9df21441b96c19c265a4072cd464b5 100644 (file)
@@ -186,7 +186,7 @@ typedef int (*TclMacConvertEventPtr) (EventRecord *eventPtr);
 void Tcl_MacSetEventProc(TclMacConvertEventPtr procPtr);
 int TkMacConvertEvent(EventRecord *eventPtr);
 
-staticforward int PyMacConvertEvent(EventRecord *eventPtr);
+static int PyMacConvertEvent(EventRecord *eventPtr);
 
 #include <SIOUX.h>
 extern int SIOUXIsAppWindow(WindowPtr);
@@ -199,7 +199,7 @@ extern int SIOUXIsAppWindow(WindowPtr);
 
 /**** Tkapp Object Declaration ****/
 
-staticforward PyTypeObject Tkapp_Type;
+static PyTypeObject Tkapp_Type;
 
 typedef struct {
        PyObject_HEAD
@@ -1515,7 +1515,7 @@ Tkapp_DeleteFileHandler(PyObject *self, PyObject *args)
 \f
 /**** Tktt Object (timer token) ****/
 
-staticforward PyTypeObject Tktt_Type;
+static PyTypeObject Tktt_Type;
 
 typedef struct {
        PyObject_HEAD
index 05c4bef97d2659c14de3e20ec8021fe748c27e67..8954528ce18eb581cd24ab58f7150b105070b4d4 100644 (file)
@@ -24,7 +24,7 @@ typedef struct {
        ALport port;
 } alpobject;
 
-staticforward PyTypeObject Alptype;
+static PyTypeObject Alptype;
 
 
 
@@ -38,7 +38,7 @@ typedef struct {
        ALconfig config;
 } alcobject;
 
-staticforward PyTypeObject Alctype;
+static PyTypeObject Alctype;
 
 
 static void
index c0e59bc0d3f6c352db79a38682d755e86a8955bd..87c51cc9ca60ced3a6057774f9aae2f299de4cdc 100644 (file)
@@ -35,7 +35,7 @@ typedef struct arrayobject {
        struct arraydescr *ob_descr;
 } arrayobject;
 
-staticforward PyTypeObject Arraytype;
+static PyTypeObject Arraytype;
 
 #define array_Check(op) PyObject_TypeCheck(op, &Arraytype)
 #define array_CheckExact(op) ((op)->ob_type == &Arraytype)
index 74f91335ec1e4c22756261fcc6c19f2eac996bb7..afb239039e1a9a3e1836e8289aedc4739ee5ee1f 100644 (file)
@@ -39,7 +39,7 @@ typedef struct {
 #endif
 } bsddbobject;
 
-staticforward PyTypeObject Bsddbtype;
+static PyTypeObject Bsddbtype;
 
 #define is_bsddbobject(v) ((v)->ob_type == &Bsddbtype)
 #define check_bsddbobject_open(v, r) if ((v)->di_bsddb == NULL) \
index ce326830fb0c2fb4dab90efa541475ae45f6c375..af424841ed2a3e5f40def5196b1d7313fd664d08 100644 (file)
@@ -288,7 +288,7 @@ typedef struct Picklerobject {
 #define PY_CPICKLE_FAST_LIMIT 50
 #endif
 
-staticforward PyTypeObject Picklertype;
+static PyTypeObject Picklertype;
 
 typedef struct Unpicklerobject {
        PyObject_HEAD
@@ -313,7 +313,7 @@ typedef struct Unpicklerobject {
        PyObject *find_class;
 } Unpicklerobject;
 
-staticforward PyTypeObject Unpicklertype;
+static PyTypeObject Unpicklertype;
 
 /* Forward decls that need the above structs */
 static int save(Picklerobject *, PyObject *, int);
index 0437368de4cd07d545be08856a464b9cec00ad54..5bb08f2913aaba764677c439cec00f67692a25f2 100644 (file)
@@ -17,9 +17,9 @@ static Py_complex c_i = {0., 1.};
 static Py_complex c_halfi = {0., 0.5};
 
 /* forward declarations */
-staticforward Py_complex c_log(Py_complex);
-staticforward Py_complex c_prodi(Py_complex);
-staticforward Py_complex c_sqrt(Py_complex);
+static Py_complex c_log(Py_complex);
+static Py_complex c_prodi(Py_complex);
+static Py_complex c_sqrt(Py_complex);
 
 
 static Py_complex
index bbc70a8427a7dc085a3cad9ff875ad0e6eae8a09..dde5b49df33b7130cd69c5178035fc3d4b379bec 100644 (file)
@@ -31,7 +31,7 @@ typedef struct {
        DBM *di_dbm;
 } dbmobject;
 
-staticforward PyTypeObject Dbmtype;
+static PyTypeObject Dbmtype;
 
 #define is_dbmobject(v) ((v)->ob_type == &Dbmtype)
 #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
index 4606ea887f18b92bd363be3265d30be2898211dc..ea083e2ee538e0d4ac8968bfeca1577dfcaca4dd 100644 (file)
@@ -15,7 +15,7 @@ typedef struct {
        PyUnivPtr *dl_handle;
 } dlobject;
 
-staticforward PyTypeObject Dltype;
+static PyTypeObject Dltype;
 
 static PyObject *Dlerror;
 
index 483ce6efed3fd43d9d853170ec35d3197274dffa..b3e7d1f80929435cb1977a491e94db420ed429ca 100644 (file)
@@ -29,7 +29,7 @@ typedef struct {
        PyObject *ob_callback_arg;
 } genericobject;
 
-staticforward PyTypeObject GenericObjecttype;
+static PyTypeObject GenericObjecttype;
 
 #define is_genericobject(g) ((g)->ob_type == &GenericObjecttype)
 
@@ -1189,7 +1189,7 @@ typedef struct {
        FL_FORM *ob_form;
 } formobject;
 
-staticforward PyTypeObject Formtype;
+static PyTypeObject Formtype;
 
 #define is_formobject(v) ((v)->ob_type == &Formtype)
 
index d6d753a4ab094b13aad68e2bd899cc300c2537fc..78a58772c2ac0f7bcba411ee4dfdad98ff96610c 100644 (file)
@@ -15,7 +15,7 @@ typedef struct {
        fmfonthandle fh_fh;
 } fhobject;
 
-staticforward PyTypeObject Fhtype;
+static PyTypeObject Fhtype;
 
 #define is_fhobject(v)         ((v)->ob_type == &Fhtype)
 
index 1da53ff2d0987608cd0cea1851a34b72a1899f61..6e85ed34690ef8e9a3da4393f8c5064a471d86c6 100644 (file)
@@ -34,7 +34,7 @@ typedef struct {
     GDBM_FILE di_dbm;
 } dbmobject;
 
-staticforward PyTypeObject Dbmtype;
+static PyTypeObject Dbmtype;
 
 #define is_dbmobject(v) ((v)->ob_type == &Dbmtype)
 #define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
index 7d4abc99cb77b5eb311051a7dff8d82e85f28b67..74cfdee4f32a67cbfc6cd58f272246e18ef79493 100644 (file)
@@ -70,7 +70,7 @@ static struct {
 
 static int n_audio_types = sizeof(audio_types) / sizeof(audio_types[0]);
 
-staticforward PyTypeObject Ladtype;
+static PyTypeObject Ladtype;
 
 static PyObject *LinuxAudioError;
 
index 045f27ffc83a5579f3ebc579947927f8bd318506..b7f2c69eab3fceb94f95a2728af2972b0b7a5476 100644 (file)
@@ -17,7 +17,7 @@ typedef struct {
         MD5_CTX        md5;            /* the context holder */
 } md5object;
 
-staticforward PyTypeObject MD5type;
+static PyTypeObject MD5type;
 
 #define is_md5object(v)                ((v)->ob_type == &MD5type)
 
index 0cdc84d4c1e4d2fe3772606ebea690eec3fae0b6..0cb6495642e74c05b5cdc5584b909304c573d193 100644 (file)
@@ -75,7 +75,7 @@ typedef struct {
         MP_INT mpz;            /* the actual number */
 } mpzobject;
 
-staticforward PyTypeObject MPZtype;
+static PyTypeObject MPZtype;
 
 #define is_mpzobject(v)                ((v)->ob_type == &MPZtype)
 
index 854d986746f03b60343669581fb09b130b6b1f02..e790352c9ffadaee3631eef7b9426fcc08c6637c 100644 (file)
@@ -157,14 +157,9 @@ typedef struct {
 } PyST_Object;
 
 
-staticforward void
-parser_free(PyST_Object *st);
-
-staticforward int
-parser_compare(PyST_Object *left, PyST_Object *right);
-
-staticforward PyObject *
-parser_getattr(PyObject *self, char *name);
+static void parser_free(PyST_Object *st);
+static int parser_compare(PyST_Object *left, PyST_Object *right);
+static PyObject *parser_getattr(PyObject *self, char *name);
 
 
 static
@@ -550,9 +545,9 @@ parser_suite(PyST_Object *self, PyObject *args, PyObject *kw)
  */
 
 
-staticforward node* build_node_tree(PyObject *tuple);
-staticforward int   validate_expr_tree(node *tree);
-staticforward int   validate_file_input(node *tree);
+static node* build_node_tree(PyObject *tuple);
+static int   validate_expr_tree(node *tree);
+static int   validate_file_input(node *tree);
 
 
 /*  PyObject* parser_tuple2st(PyObject* self, PyObject* args)
@@ -793,7 +788,7 @@ build_node_tree(PyObject *tuple)
 /*
  *  Validation routines used within the validation section:
  */
-staticforward int validate_terminal(node *terminal, int type, char *string);
+static int validate_terminal(node *terminal, int type, char *string);
 
 #define validate_ampersand(ch)  validate_terminal(ch,      AMPER, "&")
 #define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^")
index 6c05766c879a4f1006dbf6a695582be7a1af6fd6..383dde86b25c2e937c04d2cdae8a31e4a54557b7 100644 (file)
@@ -24,7 +24,7 @@ typedef struct {
         int num_groups;
 } PcreObject;
 
-staticforward PyTypeObject Pcre_Type;
+static PyTypeObject Pcre_Type;
 
 #define PcreObject_Check(v)    ((v)->ob_type == &Pcre_Type)
 #define NORMAL                 0
@@ -125,7 +125,7 @@ PyPcre_getattr(PcreObject *self, char *name)
 }
 
 
-staticforward PyTypeObject Pcre_Type = {
+static PyTypeObject Pcre_Type = {
        PyObject_HEAD_INIT(NULL)
        0,                      /*ob_size*/
        "pcre.Pcre",            /*tp_name*/
index 396986accb1cc7c3c64ec3f24ee04e2c76dd47a6..2d14675bba25406bca938a67fcf5d4a12ec09db2 100644 (file)
@@ -66,7 +66,7 @@ typedef struct {
 
 #define CHARACTER_DATA_BUFFER_SIZE 8192
 
-staticforward PyTypeObject Xmlparsetype;
+static PyTypeObject Xmlparsetype;
 
 typedef void (*xmlhandlersetter)(XML_Parser *self, void *meth);
 typedef void* xmlhandler;
@@ -79,7 +79,7 @@ struct HandlerInfo {
     PyObject *nameobj;
 };
 
-staticforward struct HandlerInfo handler_info[64];
+static struct HandlerInfo handler_info[64];
 
 /* Set an integer attribute on the error object; return true on success,
  * false on an exception.
index 0377832918465cb6e71ca1bbd19161a459487ba0..75f1aeb1a2fefcc4516b1b7e9d6e97a3d932b835 100644 (file)
@@ -78,7 +78,7 @@ typedef struct {
        unsigned char *advances;             /* [num_rotors] */
 } Rotorobj;
 
-staticforward PyTypeObject Rotor_Type;
+static PyTypeObject Rotor_Type;
 
 #define is_rotor(v)            ((v)->ob_type == &Rotor_Type)
 
index 73abd4f2ae2d71ab1452b0edfeb2aec281019432..5d9ab35b54a4d50f28ea3c4ec4676e200ef49001 100644 (file)
@@ -322,7 +322,7 @@ typedef struct {
         struct pollfd *ufds;
 } pollObject;
 
-staticforward PyTypeObject poll_Type;
+static PyTypeObject poll_Type;
 
 /* Update the malloc'ed array of pollfds to match the dictionary 
    contained within a pollObject.  Return 1 on success, 0 on an error.
index 94b1eff4840b137fb707b1eca7d20a3e04b67d3d..14e51ea6eb58fd3f9a85a8fa31392a25b5b0aecb 100644 (file)
@@ -330,7 +330,7 @@ sha_final(unsigned char digest[20], SHAobject *sha_info)
  * ------------------------------------------------------------------------
  */
 
-staticforward PyTypeObject SHAtype;
+static PyTypeObject SHAtype;
 
 
 static SHAobject *
index 3b194b3f88032d21a429d3173ef6e0c81209379f..5314dcfc213a8e116c0f196df9c36619bc6a9306 100644 (file)
@@ -276,7 +276,7 @@ static int taskwindow;
    The sock_type variable contains pointers to various functions,
    some of which call new_sockobject(), which uses sock_type, so
    there has to be a circular reference. */
-staticforward PyTypeObject sock_type;
+static PyTypeObject sock_type;
 
 /* Convenience function to raise an error according to errno
    and return a NULL pointer from a function. */
index 506ee33c59a58b46502e635cffb7866e99c9deef..3269c761d64f17a8e18899c354404aa8864d24a9 100644 (file)
@@ -36,8 +36,8 @@ typedef struct {
        audio_info_t ai;
 } sadstatusobject;
 
-staticforward PyTypeObject Sadtype;
-staticforward PyTypeObject Sadstatustype;
+static PyTypeObject Sadtype;
+static PyTypeObject Sadstatustype;
 static sadstatusobject *sads_alloc(void);      /* Forward */
 
 static PyObject *SunAudioError;
index aa9d3c9c22744728ae10edbc48152cc301a552f1..b872dd02138e6056549d24521972f073343a3e6a 100644 (file)
@@ -22,7 +22,7 @@ typedef struct {
        PyThread_type_lock lock_lock;
 } lockobject;
 
-staticforward PyTypeObject Locktype;
+static PyTypeObject Locktype;
 
 static lockobject *
 newlockobject(void)
index 7fba5dbfeba55f4786b7e1e3fb12b0b506de5dc8..8c6b91f201d310cd57658c330a06b263412855c0 100644 (file)
@@ -14,7 +14,7 @@ typedef struct {
        int abslineno;
 } PyXReadlinesObject;
 
-staticforward PyTypeObject XReadlinesObject_Type;
+static PyTypeObject XReadlinesObject_Type;
 
 static void
 xreadlines_dealloc(PyXReadlinesObject *op)
index b170651abb720e85d364621c4ce5e5a940e07aa2..07f5d647b18254defa5e782e49e34c2c1bcb8da7 100644 (file)
@@ -23,7 +23,7 @@ typedef struct {
        PyObject        *x_attr;        /* Attributes dictionary */
 } XxoObject;
 
-staticforward PyTypeObject Xxo_Type;
+static PyTypeObject Xxo_Type;
 
 #define XxoObject_Check(v)     ((v)->ob_type == &Xxo_Type)
 
index 353f773c286a097f3490918735f74ca1c8eb04f2..90134678d3f42e567291fc0de478730678d0ad61 100644 (file)
@@ -79,7 +79,7 @@ static PyMethodDef spamlist_methods[] = {
        {NULL,  NULL},
 };
 
-staticforward PyTypeObject spamlist_type;
+static PyTypeObject spamlist_type;
 
 static int
 spamlist_init(spamlistobject *self, PyObject *args, PyObject *kwds)
@@ -179,7 +179,7 @@ static PyMethodDef spamdict_methods[] = {
        {NULL,  NULL},
 };
 
-staticforward PyTypeObject spamdict_type;
+static PyTypeObject spamdict_type;
 
 static int
 spamdict_init(spamdictobject *self, PyObject *args, PyObject *kwds)
index 3e979a396e92ebaf1f5335b43d24c7e40af9b52e..2ee4996fdc6799d2a75923b9411b49deb107bbff 100644 (file)
@@ -55,8 +55,8 @@ static PyThread_type_lock zlib_lock = NULL; /* initialized on module load */
 #define DEFAULTALLOC (16*1024)
 #define PyInit_zlib initzlib
 
-staticforward PyTypeObject Comptype;
-staticforward PyTypeObject Decomptype;
+static PyTypeObject Comptype;
+static PyTypeObject Decomptype;
 
 static PyObject *ZlibError;
 
index 26191609a193180b6c27cadbb26b814ff77f873e..86c74ba5ee7a766e060a2aa728f97d9ab91e6f51 100644 (file)
@@ -1611,7 +1611,7 @@ dict_tp_clear(PyObject *op)
 }
 
 
-staticforward PyObject *dictiter_new(dictobject *, binaryfunc);
+static PyObject *dictiter_new(dictobject *, binaryfunc);
 
 static PyObject *
 select_key(PyObject *key, PyObject *value)
index d711726a1baa677859fbed26849b24495517edac..2787a0a7d4f51b9f630eee6cb4c8e458e7ed09f7 100644 (file)
@@ -678,7 +678,7 @@ float_float(PyObject *v)
 }
 
 
-staticforward PyObject *
+static PyObject *
 float_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index 444ada338c6df3a389bdf393d4e3687dec17d8ab..0202980c9620ad427033579f27c8580490bae61b 100644 (file)
@@ -775,7 +775,7 @@ int_hex(PyIntObject *v)
        return PyString_FromString(buf);
 }
 
-staticforward PyObject *
+static PyObject *
 int_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index d0d11274fcc50bc3d9d4cd6f42c5b97e0c097197..81730255f717fff6a7c3b12d85f3ca292f600f24 100644 (file)
@@ -1282,7 +1282,7 @@ samplesortslice(PyObject **lo, PyObject **hi, PyObject *compare)
 
 #undef SETK
 
-staticforward PyTypeObject immutable_list_type;
+static PyTypeObject immutable_list_type;
 
 static PyObject *
 listsort(PyListObject *self, PyObject *args)
index 7f94a622ffb0c4f14135887d5a32f2ca1d5ebc87..b1271f4620e80a42fce94fc98aab1376fd299362 100644 (file)
@@ -2199,7 +2199,8 @@ long_hex(PyObject *v)
 {
        return long_format(v, 16, 1);
 }
-staticforward PyObject *
+
+static PyObject *
 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index 7c0e6098c832875b1f8b85ab9f23e56cae295ef0..3080252ffc6003ffbc1e444ea0e3c78392a9b7e9 100644 (file)
@@ -163,7 +163,7 @@ static PySequenceMethods range_as_sequence = {
        0,                      /* sq_slice */
 };
 
-staticforward PyObject * range_iter(PyObject *seq);
+static PyObject * range_iter(PyObject *seq);
 
 PyTypeObject PyRange_Type = {
        PyObject_HEAD_INIT(&PyType_Type)
@@ -217,7 +217,7 @@ typedef struct {
        long    len;
 } rangeiterobject;
 
-staticforward PyTypeObject Pyrangeiter_Type;
+static PyTypeObject Pyrangeiter_Type;
 
 static PyObject *
 range_iter(PyObject *seq)
index 0543f80a231c232ec703630978df7c8a0dfae763..5e40524a0aabbc26e5629e4b4dcd86ff907ed829 100644 (file)
@@ -2864,7 +2864,7 @@ string_methods[] = {
        {NULL,     NULL}                     /* sentinel */
 };
 
-staticforward PyObject *
+static PyObject *
 str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index 1a15bb71294f3adc0f56448403fafaeb1ee69352..add9cac639c20cad91fe9b4341419a1f146fb3a7 100644 (file)
@@ -479,7 +479,7 @@ tuplerichcompare(PyObject *v, PyObject *w, int op)
        return PyObject_RichCompare(vt->ob_item[i], wt->ob_item[i], op);
 }
 
-staticforward PyObject *
+static PyObject *
 tuple_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index 31a7c3d2616cd4e53a78054c0dae9e438d3fd6e9..9662d9560eeb8ce68bbb38a3a3d0489415bf9925 100644 (file)
@@ -356,7 +356,7 @@ subtype_clear(PyObject *self)
        return 0;
 }
 
-staticforward PyObject *lookup_maybe(PyObject *, char *, PyObject **);
+static PyObject *lookup_maybe(PyObject *, char *, PyObject **);
 
 static int
 call_finalizer(PyObject *self)
@@ -469,7 +469,7 @@ subtype_dealloc(PyObject *self)
        }
 }
 
-staticforward PyTypeObject *solid_base(PyTypeObject *type);
+static PyTypeObject *solid_base(PyTypeObject *type);
 
 /* type test with subclassing support */
 
@@ -894,10 +894,10 @@ solid_base(PyTypeObject *type)
                return base;
 }
 
-staticforward void object_dealloc(PyObject *);
-staticforward int object_init(PyObject *, PyObject *, PyObject *);
-staticforward int update_slot(PyTypeObject *, PyObject *);
-staticforward void fixup_slot_dispatchers(PyTypeObject *);
+static void object_dealloc(PyObject *);
+static int object_init(PyObject *, PyObject *, PyObject *);
+static int update_slot(PyTypeObject *, PyObject *);
+static void fixup_slot_dispatchers(PyTypeObject *);
 
 static PyObject *
 subtype_dict(PyObject *obj, void *context)
@@ -2187,8 +2187,8 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
        }
 }
 
-staticforward int add_operators(PyTypeObject *);
-staticforward int add_subclass(PyTypeObject *base, PyTypeObject *type);
+static int add_operators(PyTypeObject *);
+static int add_subclass(PyTypeObject *base, PyTypeObject *type);
 
 int
 PyType_Ready(PyTypeObject *type)
@@ -3118,7 +3118,7 @@ SLOT1BIN(slot_nb_divide, nb_divide, "__div__", "__rdiv__")
 SLOT1BIN(slot_nb_remainder, nb_remainder, "__mod__", "__rmod__")
 SLOT1BIN(slot_nb_divmod, nb_divmod, "__divmod__", "__rdivmod__")
 
-staticforward PyObject *slot_nb_power(PyObject *, PyObject *, PyObject *);
+static PyObject *slot_nb_power(PyObject *, PyObject *, PyObject *);
 
 SLOT1BINFULL(slot_nb_power_binary, slot_nb_power,
             nb_power, "__pow__", "__rpow__")
@@ -4013,8 +4013,8 @@ update_one_slot(PyTypeObject *type, slotdef *p)
        return p;
 }
 
-staticforward int recurse_down_subclasses(PyTypeObject *type,
-                                         slotdef **pp, PyObject *name);
+static int recurse_down_subclasses(PyTypeObject *type, slotdef **pp, 
+                                  PyObject *name);
 
 /* In the type, update the slots whose slotdefs are gathered in the pp0 array,
    and then do the same for all this type's subtypes. */
index 1b45ef774f2bb1734c7b676f3499e36f418f0b91..9f61652d6c364fbcf204aee9334e1b2370fc80c9 100644 (file)
@@ -5796,7 +5796,7 @@ static PyBufferProcs unicode_as_buffer = {
     (getcharbufferproc) unicode_buffer_getcharbuf,
 };
 
-staticforward PyObject *
+static PyObject *
 unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
 
 static PyObject *
index 117714a7b67ec1ce01b57e7d365a73845f07e95c..d847c52310fd0c546dee326413a231580938cf3d 100644 (file)
@@ -18,7 +18,7 @@ typedef struct {
        PyObject        *x_attr;        /* Attributes dictionary */
 } xxobject;
 
-staticforward PyTypeObject Xxtype;
+static PyTypeObject Xxtype;
 
 #define is_xxobject(v)         ((v)->ob_type == &Xxtype)
 
index 8c19787a5254ad51c29acdaf5bd983ffbc5207cf..0cd1c3623c4e50de8ee3d4549f309694d24e1c2a 100644 (file)
@@ -84,7 +84,7 @@ static long dxp[256];
 #endif
 #endif
 
-staticforward PyTypeObject gentype;
+static PyTypeObject gentype;
 
 typedef struct {
        PyObject_HEAD
index 87ae40f8c1a5c251c40af95e30621645f574b50b..86878b9c58ca50486e67dd0c4635f7a769a9e189 100644 (file)
@@ -40,7 +40,7 @@ class ObjectDefinition(GeneratorGroup):
 
                OutHeader2("Object type " + self.name)
 
-               sf = self.static and "staticforward "
+               sf = self.static and "static "
                Output("%sPyTypeObject %s;", sf, self.typename)
                Output()
                Output("#define %s_Check(x) ((x)->ob_type == &%s)",
@@ -164,7 +164,7 @@ class ObjectDefinition(GeneratorGroup):
                Output("#define %s_hash NULL", self.prefix)
 
        def outputTypeObject(self):
-               sf = self.static and "staticforward "
+               sf = self.static and "static "
                Output()
                Output("%sPyTypeObject %s = {", sf, self.typename)
                IndentLevel()
index 9e6fa5eeac039e5b556849a118b483b87e3d21dd..07d1f6a9fd65ed089cc87a79e38b64c026cc2b87 100644 (file)
@@ -6,7 +6,7 @@ typedef struct {
        /* XXXX Add your own stuff here */
 } $abbrev$object;
 
-staticforward PyTypeObject $Abbrev$type;
+static PyTypeObject $Abbrev$type;
 
 
 
index 48d4cd4e740ee4833a5aef337c902164c8aca741..0979bfd6434fd8bb4abfaf78fdc38bce4169eef9 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.327 .
+# From configure.in Revision: 1.328 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.53.
 #
@@ -13774,64 +13774,6 @@ echo "${ECHO_T}no" >&6
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 
-echo "$as_me:$LINENO: checking for bad static forward" >&5
-echo $ECHO_N "checking for bad static forward... $ECHO_C" >&6
-if test "${ac_cv_bad_static_forward+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_bad_static_forward=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-struct s { int a; int b; };
-static struct s foo;
-int foobar() {
- static int random;
- random = (int) &foo;
- return random;
-}
-static struct s foo = { 1, 2 };
-main() {
- exit(!((int)&foo == foobar()));
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_bad_static_forward=no
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-( exit $ac_status )
-ac_cv_bad_static_forward=yes
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-
-echo "$as_me:$LINENO: result: $ac_cv_bad_static_forward" >&5
-echo "${ECHO_T}$ac_cv_bad_static_forward" >&6
-if test "$ac_cv_bad_static_forward" = yes
-then
-
-cat >>confdefs.h <<\_ACEOF
-#define BAD_STATIC_FORWARD 1
-_ACEOF
-
-fi
-
 va_list_is_array=no
 echo "$as_me:$LINENO: checking whether va_list is an array" >&5
 echo $ECHO_N "checking whether va_list is an array... $ECHO_C" >&6
index 57d9a4acc6c0633578e7eaac76234d8a5e089561..5fbe2ecd071d4332bbacc2c67e1892498d80bbad 100644 (file)
@@ -1896,31 +1896,6 @@ x.sa_len = 0;],
        AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Define if sockaddr has sa_len member]),
        AC_MSG_RESULT(no))
 
-AC_MSG_CHECKING(for bad static forward)
-AC_CACHE_VAL(ac_cv_bad_static_forward,
-[AC_TRY_RUN([
-struct s { int a; int b; };
-static struct s foo;
-int foobar() {
- static int random;
- random = (int) &foo;
- return random;
-}
-static struct s foo = { 1, 2 };
-main() {
- exit(!((int)&foo == foobar()));
-}],
-ac_cv_bad_static_forward=no,
-ac_cv_bad_static_forward=yes,
-ac_cv_bad_static_forward=no)])
-AC_MSG_RESULT($ac_cv_bad_static_forward)
-if test "$ac_cv_bad_static_forward" = yes
-then
-    AC_DEFINE(BAD_STATIC_FORWARD, 1, 
-    [Define if your compiler botches static forward declarations
-    (as it does on SCI ODT 3.0)])
-fi
-
 va_list_is_array=no
 AC_MSG_CHECKING(whether va_list is an array)
 AC_TRY_COMPILE([