pyke/pyke.[ch]: Make type skeleton structures be read-only.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 20 Oct 2019 20:18:08 +0000 (21:18 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 25 Nov 2019 17:43:08 +0000 (17:43 +0000)
We couldn't do this before because `INITTYPE_META' would write the
direct superclass to the `tp_base' slot in the skeleton before calling
`inittype'.  To make this work, then, we adjust `inittype' to take the
direct superclass as an extra argument and plug it into the newly
created heap-type; and `INITTYPE_META' needs adjusting to pass this
argument rather than trying to write to the skeleton directly.

Of course, then we need to actually mark the type skeletons as `const'.

17 files changed:
algorithms.c
buffer.c
bytestring.c
catacomb.c
ec.c
field.c
group.c
key.c
mp.c
passphrase.c
pgen.c
pubkey.c
pyke/mapping.c
pyke/pyke.c
pyke/pyke.h
rand.c
share.c

index 858597a..0ff2bf0 100644 (file)
@@ -295,7 +295,7 @@ static const PyMemberDef keyszset_pymembers[] = {
   { 0 }
 };
 
-static PyTypeObject keysz_pytype_skel = {
+static const PyTypeObject keysz_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZ",                             /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
@@ -343,7 +343,7 @@ static PyTypeObject keysz_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszany_pytype_skel = {
+static const PyTypeObject keyszany_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZAny",                          /* @tp_name@ */
   sizeof(keysz_pyobj),                 /* @tp_basicsize@ */
@@ -392,7 +392,7 @@ static PyTypeObject keyszany_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszrange_pytype_skel = {
+static const PyTypeObject keyszrange_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZRange",                                /* @tp_name@ */
   sizeof(keyszrange_pyobj),            /* @tp_basicsize@ */
@@ -442,7 +442,7 @@ static PyTypeObject keyszrange_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject keyszset_pytype_skel = {
+static const PyTypeObject keyszset_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeySZSet",                          /* @tp_name@ */
   sizeof(keyszset_pyobj),              /* @tp_basicsize@ */
@@ -669,7 +669,7 @@ static const PyMethodDef gcipher_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gccipher_pytype_skel = {
+static const PyTypeObject gccipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCCipher",                          /* @tp_name@ */
   sizeof(gccipher_pyobj),              /* @tp_basicsize@ */
@@ -717,7 +717,7 @@ static PyTypeObject gccipher_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcipher_pytype_skel = {
+static const PyTypeObject gcipher_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCipher",                           /* @tp_name@ */
   sizeof(gcipher_pyobj),               /* @tp_basicsize@ */
@@ -1552,7 +1552,7 @@ static const PyMethodDef gaeaddec_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gcaead_pytype_skel = {
+static const PyTypeObject gcaead_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCAEAD",                            /* @tp_name@ */
   sizeof(gcaead_pyobj),                        /* @tp_basicsize@ */
@@ -1600,7 +1600,7 @@ static PyTypeObject gcaead_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadkey_pytype_skel = {
+static const PyTypeObject gaeadkey_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEKey",                            /* @tp_name@ */
   sizeof(gaeadkey_pyobj),              /* @tp_basicsize@ */
@@ -1648,7 +1648,7 @@ static PyTypeObject gaeadkey_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeadaad_pytype_skel = {
+static const PyTypeObject gcaeadaad_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEAADClass",                       /* @tp_name@ */
   sizeof(gcaeadaad_pyobj),             /* @tp_basicsize@ */
@@ -1696,7 +1696,7 @@ static PyTypeObject gcaeadaad_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadaad_pytype_skel = {
+static const PyTypeObject gaeadaad_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEAAD",                            /* @tp_name@ */
   sizeof(gaeadaad_pyobj),              /* @tp_basicsize@ */
@@ -1744,7 +1744,7 @@ static PyTypeObject gaeadaad_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeadenc_pytype_skel = {
+static const PyTypeObject gcaeadenc_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEEncClass",                       /* @tp_name@ */
   sizeof(gcaeadenc_pyobj),             /* @tp_basicsize@ */
@@ -1792,7 +1792,7 @@ static PyTypeObject gcaeadenc_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeadenc_pytype_skel = {
+static const PyTypeObject gaeadenc_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEEnc",                            /* @tp_name@ */
   sizeof(gaeadenc_pyobj),              /* @tp_basicsize@ */
@@ -1840,7 +1840,7 @@ static PyTypeObject gaeadenc_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcaeaddec_pytype_skel = {
+static const PyTypeObject gcaeaddec_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEDecClass",                       /* @tp_name@ */
   sizeof(gcaeaddec_pyobj),             /* @tp_basicsize@ */
@@ -1888,7 +1888,7 @@ static PyTypeObject gcaeaddec_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gaeaddec_pytype_skel = {
+static const PyTypeObject gaeaddec_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GAEDec",                            /* @tp_name@ */
   sizeof(gaeaddec_pyobj),              /* @tp_basicsize@ */
@@ -2086,7 +2086,7 @@ static const PyMethodDef ghash_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gchash_pytype_skel = {
+static const PyTypeObject gchash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCHash",                            /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
@@ -2134,7 +2134,7 @@ static PyTypeObject gchash_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject ghash_pytype_skel = {
+static const PyTypeObject ghash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GHash",                             /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
@@ -2300,7 +2300,7 @@ static const PyGetSetDef gcmac_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject gcmac_pytype_skel = {
+static const PyTypeObject gcmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCMAC",                             /* @tp_name@ */
   sizeof(gchash_pyobj),                        /* @tp_basicsize@ */
@@ -2348,7 +2348,7 @@ static PyTypeObject gcmac_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gmac_pytype_skel = {
+static const PyTypeObject gmac_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GMAC",                              /* @tp_name@ */
   sizeof(gmac_pyobj),                  /* @tp_basicsize@ */
@@ -2396,7 +2396,7 @@ static PyTypeObject gmac_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gmhash_pytype_skel = {
+static const PyTypeObject gmhash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GMACHash",                          /* @tp_name@ */
   sizeof(ghash_pyobj),                 /* @tp_basicsize@ */
@@ -2646,7 +2646,7 @@ static const PyMethodDef poly1305hash_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject poly1305cls_pytype_skel = {
+static const PyTypeObject poly1305cls_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Poly1305Class",                     /* @tp_name@ */
   sizeof(PyHeapTypeObject),            /* @tp_basicsize@ */
@@ -2694,7 +2694,7 @@ static PyTypeObject poly1305cls_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject poly1305key_pytype_skel = {
+static const PyTypeObject poly1305key_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "poly1305",                          /* @tp_name@ */
   sizeof(poly1305key_pyobj),           /* @tp_basicsize@ */
@@ -2742,7 +2742,7 @@ static PyTypeObject poly1305key_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject poly1305hash_pytype_skel = {
+static const PyTypeObject poly1305hash_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Poly1305Hash",                      /* @tp_name@ */
   sizeof(poly1305hash_pyobj),          /* @tp_basicsize@ */
@@ -2922,7 +2922,7 @@ static const PyMethodDef kxvik_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject kxvik_pytype_skel = {
+static const PyTypeObject kxvik_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Keccak1600",                                /* @tp_name@ */
   sizeof(kxvik_pyobj),                 /* @tp_basicsize@ */
@@ -3167,7 +3167,7 @@ static const PyMethodDef shake_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject shake_pytype_skel = {
+static const PyTypeObject shake_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake",                             /* @tp_name@ */
   sizeof(shake_pyobj),                 /* @tp_basicsize@ */
@@ -3215,7 +3215,7 @@ static PyTypeObject shake_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject shake128_pytype_skel = {
+static const PyTypeObject shake128_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake128",                          /* @tp_name@ */
   0,                                   /* @tp_basicsize@ */
@@ -3263,7 +3263,7 @@ static PyTypeObject shake128_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject shake256_pytype_skel = {
+static const PyTypeObject shake256_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Shake256",                          /* @tp_name@ */
   0,                                   /* @tp_basicsize@ */
@@ -3460,7 +3460,7 @@ static const PyMethodDef gprp_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gcprp_pytype_skel = {
+static const PyTypeObject gcprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCPRP",                             /* @tp_name@ */
   sizeof(gcprp_pyobj),                 /* @tp_basicsize@ */
@@ -3508,7 +3508,7 @@ static PyTypeObject gcprp_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gprp_pytype_skel = {
+static const PyTypeObject gprp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GPRP",                              /* @tp_name@ */
   sizeof(gprp_pyobj),                  /* @tp_basicsize@ */
index 690c7cd..6f6d422 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -280,7 +280,7 @@ static const PyBufferProcs rbuf_pybuffer = {
   0                                    /* @bf_getcharbuffer@ */
 };
 
-static PyTypeObject rbuf_pytype_skel = {
+static const PyTypeObject rbuf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ReadBuffer",                                /* @tp_name@ */
   sizeof(buf_pyobj),                   /* @tp_basicsize@ */
@@ -520,7 +520,7 @@ static const PyBufferProcs wbuf_pybuffer = {
   0                                    /* @bf_getcharbuffer@ */
 };
 
-static PyTypeObject wbuf_pytype_skel = {
+static const PyTypeObject wbuf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "WriteBuffer",                       /* @tp_name@ */
   sizeof(buf_pyobj),                   /* @tp_basicsize@ */
index 95da629..3bf1b25 100644 (file)
@@ -317,7 +317,7 @@ static const PyMappingMethods bytestring_pymapping = {
   0,                                   /* @mp_ass_subscript@ */
 };
 
-static PyTypeObject bytestring_pytype_skel = {
+static const PyTypeObject bytestring_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ByteString",                                /* @tp_name@ */
   0,                                   /* @tp_basicsize@ */
index 01311bf..bead975 100644 (file)
@@ -162,7 +162,7 @@ static PyObject *meth__ego(PyObject *me, PyObject *arg)
   RETURN_NONE;
 }
 
-static PyMethodDef methods[] = {
+static const PyMethodDef methods[] = {
 #define METHNAME(func) meth_##func
   METH (_ego,          "_ego(ARGV0)")
 #undef METHNAME
diff --git a/ec.c b/ec.c
index b023fa5..b958d53 100644 (file)
--- a/ec.c
+++ b/ec.c
@@ -684,7 +684,7 @@ static const PyNumberMethods ecpt_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject ecpt_pytype_skel = {
+static const PyTypeObject ecpt_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECPt",                              /* @tp_name@ */
   sizeof(ecpt_pyobj),                  /* @tp_basicsize@ */
@@ -810,7 +810,7 @@ static const PyNumberMethods ecptcurve_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject ecptcurve_pytype_skel = {
+static const PyTypeObject ecptcurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECPtCurve",                         /* @tp_name@ */
   sizeof(ecpt_pyobj),                  /* @tp_basicsize@ */
@@ -1069,7 +1069,7 @@ static const PyMethodDef eccurve_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject eccurve_pytype_skel = {
+static const PyTypeObject eccurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECCurve",                           /* @tp_name@ */
   sizeof(eccurve_pyobj),               /* @tp_basicsize@ */
@@ -1123,7 +1123,7 @@ static PyObject *ecprimecurve_pynew(PyTypeObject *ty,
   return (eccurve_pynew(ty, ec_prime, arg, kw));
 }
 
-static PyTypeObject ecprimecurve_pytype_skel = {
+static const PyTypeObject ecprimecurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECPrimeCurve",                      /* @tp_name@ */
   sizeof(eccurve_pyobj),               /* @tp_basicsize@ */
@@ -1178,7 +1178,7 @@ static PyObject *ecprimeprojcurve_pynew(PyTypeObject *ty,
   return (eccurve_pynew(ty, ec_primeproj, arg, kw));
 }
 
-static PyTypeObject ecprimeprojcurve_pytype_skel = {
+static const PyTypeObject ecprimeprojcurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECPrimeProjCurve",                  /* @tp_name@ */
   sizeof(eccurve_pyobj),               /* @tp_basicsize@ */
@@ -1233,7 +1233,7 @@ static PyObject *ecbincurve_pynew(PyTypeObject *ty,
   return (eccurve_pynew(ty, ec_bin, arg, kw));
 }
 
-static PyTypeObject ecbincurve_pytype_skel = {
+static const PyTypeObject ecbincurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECBinCurve",                                /* @tp_name@ */
   sizeof(eccurve_pyobj),               /* @tp_basicsize@ */
@@ -1288,7 +1288,7 @@ static PyObject *ecbinprojcurve_pynew(PyTypeObject *ty,
   return (eccurve_pynew(ty, ec_binproj, arg, kw));
 }
 
-static PyTypeObject ecbinprojcurve_pytype_skel = {
+static const PyTypeObject ecbinprojcurve_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECBinProjCurve",                    /* @tp_name@ */
   sizeof(eccurve_pyobj),               /* @tp_basicsize@ */
@@ -1493,7 +1493,7 @@ static const PyMethodDef ecinfo_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject ecinfo_pytype_skel = {
+static const PyTypeObject ecinfo_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECInfo",                            /* @tp_name@ */
   sizeof(ecinfo_pyobj),                        /* @tp_basicsize@ */
diff --git a/field.c b/field.c
index 1ff5ed2..9da6063 100644 (file)
--- a/field.c
+++ b/field.c
@@ -393,7 +393,7 @@ static const PyNumberMethods fe_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject fe_pytype_skel = {
+static const PyTypeObject fe_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "FE",                                        /* @tp_name@ */
   sizeof(fe_pyobj),                    /* @tp_basicsize@ */
@@ -539,7 +539,7 @@ static const PyMethodDef field_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject field_pytype_skel = {
+static const PyTypeObject field_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Field",                             /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
@@ -617,7 +617,7 @@ static const PyGetSetDef primefield_pygetset[] = {
 #undef GETSETNAME
 };
 
-static PyTypeObject primefield_pytype_skel = {
+static const PyTypeObject primefield_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeField",                                /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
@@ -684,7 +684,7 @@ end:
   return (0);
 }
 
-static PyTypeObject niceprimefield_pytype_skel = {
+static const PyTypeObject niceprimefield_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "NicePrimeField",                    /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
@@ -748,7 +748,7 @@ static const PyGetSetDef binfield_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject binfield_pytype_skel = {
+static const PyTypeObject binfield_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BinField",                          /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
@@ -814,7 +814,7 @@ end:
   return (0);
 }
 
-static PyTypeObject binpolyfield_pytype_skel = {
+static const PyTypeObject binpolyfield_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BinPolyField",                      /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
@@ -893,7 +893,7 @@ static const PyGetSetDef binnormfield_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject binnormfield_pytype_skel = {
+static const PyTypeObject binnormfield_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BinNormField",                      /* @tp_name@ */
   sizeof(field_pyobj),                 /* @tp_basicsize@ */
diff --git a/group.c b/group.c
index 62e67b3..d02f356 100644 (file)
--- a/group.c
+++ b/group.c
@@ -345,7 +345,7 @@ static const PyMethodDef bindhinfo_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject fginfo_pytype_skel = {
+static const PyTypeObject fginfo_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "FGInfo",                            /* @tp_name@ */
   sizeof(fginfo_pyobj),                        /* @tp_basicsize@ */
@@ -393,7 +393,7 @@ static PyTypeObject fginfo_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject dhinfo_pytype_skel = {
+static const PyTypeObject dhinfo_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "DHInfo",                            /* @tp_name@ */
   sizeof(fginfo_pyobj),                        /* @tp_basicsize@ */
@@ -441,7 +441,7 @@ static PyTypeObject dhinfo_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject bindhinfo_pytype_skel = {
+static const PyTypeObject bindhinfo_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BinDHInfo",                         /* @tp_name@ */
   sizeof(fginfo_pyobj),                        /* @tp_basicsize@ */
@@ -1049,7 +1049,7 @@ static const PyNumberMethods ge_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject ge_pytype_skel = {
+static const PyTypeObject ge_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GE",                                        /* @tp_name@ */
   sizeof(ge_pyobj),                    /* @tp_basicsize@ */
@@ -1119,7 +1119,7 @@ static const PyMethodDef group_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject group_pytype_skel = {
+static const PyTypeObject group_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Group",                             /* @tp_name@ */
   sizeof(group_pyobj),                 /* @tp_basicsize@ */
@@ -1196,7 +1196,7 @@ static PyObject *primegroup_pynew(PyTypeObject *ty,
   return (group_dopywrap(ty, group_prime(FGINFO_DP(i))));
 }
 
-static PyTypeObject primegroup_pytype_skel = {
+static const PyTypeObject primegroup_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGroup",                                /* @tp_name@ */
   sizeof(group_pyobj),                 /* @tp_basicsize@ */
@@ -1273,7 +1273,7 @@ static PyObject *bingroup_pynew(PyTypeObject *ty,
   return (group_dopywrap(ty, group_binary(FGINFO_DP(i))));
 }
 
-static PyTypeObject bingroup_pytype_skel = {
+static const PyTypeObject bingroup_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BinGroup",                          /* @tp_name@ */
   sizeof(group_pyobj),                 /* @tp_basicsize@ */
@@ -1351,7 +1351,7 @@ static PyObject *ecgroup_pynew(PyTypeObject *ty,
   return (group_dopywrap(ty, group_ec(&ei)));
 }
 
-static PyTypeObject ecgroup_pytype_skel = {
+static const PyTypeObject ecgroup_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ECGroup",                           /* @tp_name@ */
   sizeof(group_pyobj),                 /* @tp_basicsize@ */
diff --git a/key.c b/key.c
index a4caa50..919b8f9 100644 (file)
--- a/key.c
+++ b/key.c
@@ -475,7 +475,7 @@ static const PyGetSetDef keydata_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydata_pytype_skel = {
+static const PyTypeObject keydata_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyData",                           /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -552,7 +552,7 @@ static const PyGetSetDef keydatabin_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydatabin_pytype_skel = {
+static const PyTypeObject keydatabin_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataBinary",                     /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -689,7 +689,7 @@ static const PyGetSetDef keydataenc_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydataenc_pytype_skel = {
+static const PyTypeObject keydataenc_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataEncrypted",                  /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -765,7 +765,7 @@ static const PyGetSetDef keydatamp_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydatamp_pytype_skel = {
+static const PyTypeObject keydatamp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataMP",                         /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -840,7 +840,7 @@ static const PyGetSetDef keydatastr_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydatastr_pytype_skel = {
+static const PyTypeObject keydatastr_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataString",                     /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -920,7 +920,7 @@ static const PyGetSetDef keydataec_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject keydataec_pytype_skel = {
+static const PyTypeObject keydataec_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataECPt",                       /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -991,7 +991,7 @@ static void subkeyiter_pydealloc(PyObject *me)
   FREEOBJ(me);
 }
 
-static PyTypeObject subkeyiter_pytype_skel = {
+static const PyTypeObject subkeyiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "SubKeyIter",                                /* @tp_name@ */
   sizeof(subkeyiter_pyobj),            /* @tp_basicsize@ */
@@ -1126,7 +1126,7 @@ static const PyMappingMethods keydatastruct_pymapping = {
   keydatastruct_pystore                        /* @mp_ass_subscript@ */
 };
 
-static PyTypeObject keydatastruct_pytype_skel = {
+static const PyTypeObject keydatastruct_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyDataStructured",                 /* @tp_name@ */
   sizeof(keydata_pyobj),               /* @tp_basicsize@ */
@@ -1202,7 +1202,7 @@ static void keyattriter_pydealloc(PyObject *me)
   FREEOBJ(me);
 }
 
-static PyTypeObject keyattriter_pytype_skel = {
+static const PyTypeObject keyattriter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyAttributeIter",                  /* @tp_name@ */
   sizeof(keyattriter_pyobj),           /* @tp_basicsize@ */
@@ -1312,7 +1312,7 @@ static const PyMappingMethods keyattrs_pymapping = {
   keyattrs_pystore                     /* @mp_ass_subscript@ */
 };
 
-static PyTypeObject keyattrs_pytype_skel = {
+static const PyTypeObject keyattrs_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyAttributes",                     /* @tp_name@ */
   sizeof(keyattrs_pyobj),              /* @tp_basicsize@ */
@@ -1615,7 +1615,7 @@ static const PyGetSetDef key_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject key_pytype_skel = {
+static const PyTypeObject key_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Key",                               /* @tp_name@ */
   sizeof(key_pyobj),                   /* @tp_basicsize@ */
@@ -1689,7 +1689,7 @@ static void keyiter_pydealloc(PyObject *me)
   FREEOBJ(me);
 }
 
-static PyTypeObject keyiter_pytype_skel = {
+static const PyTypeObject keyiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyFileIter",                       /* @tp_name@ */
   sizeof(keyiter_pyobj),               /* @tp_basicsize@ */
@@ -2009,7 +2009,7 @@ static const PyMappingMethods keyfile_pymapping = {
   0
 };
 
-static PyTypeObject keyfile_pytype_skel = {
+static const PyTypeObject keyfile_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KeyFile",                           /* @tp_name@ */
   sizeof(keyfile_pyobj),               /* @tp_basicsize@ */
diff --git a/mp.c b/mp.c
index 2fc82b2..fbafcee 100644 (file)
--- a/mp.c
+++ b/mp.c
@@ -931,7 +931,7 @@ static const PyNumberMethods mp_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject mp_pytype_skel = {
+static const PyTypeObject mp_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MP",                                        /* @tp_name@ */
   sizeof(mp_pyobj),                    /* @tp_basicsize@ */
@@ -995,6 +995,8 @@ static PyTypeObject mp_pytype_skel = {
 
 /*----- Products of small integers ----------------------------------------*/
 
+static PyTypeObject *mpmul_pytype;
+
 typedef struct mpmul_pyobj {
   PyObject_HEAD
   int livep;
@@ -1088,7 +1090,7 @@ static const PyMethodDef mpmul_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *mpmul_pytype, mpmul_pytype_skel = {
+static const PyTypeObject mpmul_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MPMul",                             /* @tp_name@ */
   sizeof(mpmul_pyobj),                 /* @tp_basicsize@ */
@@ -1138,6 +1140,8 @@ static PyTypeObject *mpmul_pytype, mpmul_pytype_skel = {
 
 /*----- Montgomery reduction ----------------------------------------------*/
 
+static PyTypeObject *mpmont_pytype;
+
 typedef struct mpmont_pyobj {
   PyObject_HEAD
   mpmont mm;
@@ -1355,7 +1359,7 @@ static const PyMethodDef mpmont_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *mpmont_pytype, mpmont_pytype_skel = {
+static const PyTypeObject mpmont_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MPMont",                            /* @tp_name@ */
   sizeof(mpmont_pyobj),                        /* @tp_basicsize@ */
@@ -1405,6 +1409,8 @@ static PyTypeObject *mpmont_pytype, mpmont_pytype_skel = {
 
 /*----- Barrett reduction -------------------------------------------------*/
 
+static PyTypeObject *mpbarrett_pytype;
+
 typedef struct mpbarrett_pyobj {
   PyObject_HEAD
   mpbarrett mb;
@@ -1494,7 +1500,7 @@ static const PyMethodDef mpbarrett_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *mpbarrett_pytype, mpbarrett_pytype_skel = {
+static const PyTypeObject mpbarrett_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MPBarrett",                         /* @tp_name@ */
   sizeof(mpbarrett_pyobj),             /* @tp_basicsize@ */
@@ -1544,6 +1550,8 @@ static PyTypeObject *mpbarrett_pytype, mpbarrett_pytype_skel = {
 
 /*----- Nice prime reduction ----------------------------------------------*/
 
+static PyTypeObject *mpreduce_pytype;
+
 typedef struct mpreduce_pyobj {
   PyObject_HEAD
   mpreduce mr;
@@ -1622,7 +1630,7 @@ static const const PyMethodDef mpreduce_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *mpreduce_pytype, mpreduce_pytype_skel = {
+static const PyTypeObject mpreduce_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MPReduce",                          /* @tp_name@ */
   sizeof(mpreduce_pyobj),              /* @tp_basicsize@ */
@@ -1672,6 +1680,8 @@ static PyTypeObject *mpreduce_pytype, mpreduce_pytype_skel = {
 
 /*----- Chinese Remainder Theorem solution --------------------------------*/
 
+static PyTypeObject *mpcrt_pytype;
+
 typedef struct mpcrt_pyobj {
   PyObject_HEAD
   mpcrt c;
@@ -1804,7 +1814,7 @@ static const PyMethodDef mpcrt_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *mpcrt_pytype, mpcrt_pytype_skel = {
+static const PyTypeObject mpcrt_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "MPCRT",                             /* @tp_name@ */
   sizeof(mpcrt_pyobj),                 /* @tp_basicsize@ */
@@ -2104,7 +2114,7 @@ static const PyNumberMethods gf_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject gf_pytype_skel = {
+static const PyTypeObject gf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GF",                                        /* @tp_name@ */
   sizeof(mp_pyobj),                    /* @tp_basicsize@ */
@@ -2169,6 +2179,8 @@ static PyTypeObject gf_pytype_skel = {
 
 /*----- Sparse poly reduction ---------------------------------------------*/
 
+static PyTypeObject *gfreduce_pytype;
+
 typedef struct gfreduce_pyobj {
   PyObject_HEAD
   gfreduce mr;
@@ -2303,7 +2315,7 @@ static const PyMethodDef gfreduce_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject *gfreduce_pytype, gfreduce_pytype_skel = {
+static const PyTypeObject gfreduce_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GFReduce",                          /* @tp_name@ */
   sizeof(gfreduce_pyobj),              /* @tp_basicsize@ */
@@ -2353,14 +2365,14 @@ static PyTypeObject *gfreduce_pytype, gfreduce_pytype_skel = {
 
 /*----- Normal/poly transformation ----------------------------------------*/
 
+static PyTypeObject *gfn_pytype;
+
 typedef struct gfn_pyobj {
   PyObject_HEAD
   mp *p;
   gfn ntop, pton;
 } gfn_pyobj;
 
-static PyTypeObject *gfn_pytype, gfn_pytype_skel;
-
 #define GFN_P(o) (((gfn_pyobj *)(o))->p)
 #define GFN_PTON(o) (&((gfn_pyobj *)(o))->pton)
 #define GFN_NTOP(o) (&((gfn_pyobj *)(o))->ntop)
@@ -2441,7 +2453,7 @@ static const PyMethodDef gfn_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gfn_pytype_skel = {
+static const PyTypeObject gfn_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GFN",                               /* @tp_name@ */
   sizeof(gfn_pyobj),                   /* @tp_basicsize@ */
index d7baf74..25d448b 100644 (file)
@@ -127,7 +127,7 @@ static const PyMethodDef pixie_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject pixie_pytype_skel = {
+static const PyTypeObject pixie_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "Pixie",                             /* @tp_name@ */
   sizeof(pixie_pyobj),                 /* @tp_basicsize@ */
diff --git a/pgen.c b/pgen.c
index 6e9584c..6bbfd82 100644 (file)
--- a/pgen.c
+++ b/pgen.c
@@ -195,7 +195,7 @@ static const PyNumberMethods pfilt_pynumber = {
   0,                                   /* @nb_inplace_true_divide@ */
 };
 
-static PyTypeObject pfilt_pytype_skel = {
+static const PyTypeObject pfilt_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeFilter",                       /* @tp_name@ */
   sizeof(pfilt_pyobj),                 /* @tp_basicsize@ */
@@ -329,7 +329,7 @@ static const PyMethodDef rabin_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject rabin_pytype_skel = {
+static const PyTypeObject rabin_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "RabinMiller",                       /* @tp_name@ */
   sizeof(rabin_pyobj),                 /* @tp_basicsize@ */
@@ -466,7 +466,7 @@ static const PyGetSetDef pgevent_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject pgevent_pytype_skel = {
+static const PyTypeObject pgevent_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGenEvent",                     /* @tp_name@ */
   sizeof(pgevent_pyobj),               /* @tp_basicsize@ */
@@ -645,7 +645,7 @@ static const PyMethodDef pgev_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject pgev_pytype_skel = {
+static const PyTypeObject pgev_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGenBuiltinHandler",            /* @tp_name@ */
   sizeof(pgev_pyobj),                  /* @tp_basicsize@ */
@@ -719,7 +719,7 @@ static const PyGetSetDef pgstep_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject pgstep_pytype_skel = {
+static const PyTypeObject pgstep_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGenStepper",                   /* @tp_name@ */
   sizeof(pgstep_pyobj),                        /* @tp_basicsize@ */
@@ -801,7 +801,7 @@ static const PyGetSetDef pgjump_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject pgjump_pytype_skel = {
+static const PyTypeObject pgjump_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGenJumper",                    /* @tp_name@ */
   sizeof(pgjump_pyobj),                        /* @tp_basicsize@ */
@@ -863,7 +863,7 @@ end:
   return ((PyObject *)rc);
 }
 
-static PyTypeObject pgtest_pytype_skel = {
+static const PyTypeObject pgtest_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "PrimeGenTester",                    /* @tp_name@ */
   sizeof(pgtest_pyobj),                        /* @tp_basicsize@ */
index d7201c6..05fc397 100644 (file)
--- a/pubkey.c
+++ b/pubkey.c
@@ -218,7 +218,7 @@ static const PyMemberDef dsapriv_pymembers[] = {
   { 0 }
 };
 
-static PyTypeObject dsapub_pytype_skel = {
+static const PyTypeObject dsapub_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "DSAPub",                            /* @tp_name@ */
   sizeof(dsa_pyobj),                   /* @tp_basicsize@ */
@@ -266,7 +266,7 @@ static PyTypeObject dsapub_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject dsapriv_pytype_skel = {
+static const PyTypeObject dsapriv_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "DSAPriv",                           /* @tp_name@ */
   sizeof(dsa_pyobj),                   /* @tp_basicsize@ */
@@ -436,7 +436,7 @@ static const PyMethodDef kcdsapriv_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject kcdsapub_pytype_skel = {
+static const PyTypeObject kcdsapub_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KCDSAPub",                          /* @tp_name@ */
   sizeof(dsa_pyobj),                   /* @tp_basicsize@ */
@@ -484,7 +484,7 @@ static PyTypeObject kcdsapub_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject kcdsapriv_pytype_skel = {
+static const PyTypeObject kcdsapriv_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "KCDSAPriv",                         /* @tp_name@ */
   sizeof(dsa_pyobj),                   /* @tp_basicsize@ */
@@ -787,7 +787,7 @@ static const PyMethodDef rsapriv_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject rsapub_pytype_skel = {
+static const PyTypeObject rsapub_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "RSAPub",                            /* @tp_name@ */
   sizeof(rsapub_pyobj),                        /* @tp_basicsize@ */
@@ -835,7 +835,7 @@ static PyTypeObject rsapub_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject rsapriv_pytype_skel = {
+static const PyTypeObject rsapriv_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "RSAPriv",                           /* @tp_name@ */
   sizeof(rsapriv_pyobj),               /* @tp_basicsize@ */
index 7080ca5..e97fcb0 100644 (file)
@@ -54,7 +54,7 @@ static PyObject *itemiter_pynext(PyObject *me)
   return (rc);
 }
 
-static PyTypeObject itemiter_pytype_skel = {
+static const PyTypeObject itemiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ItemIter",                          /* @tp_name@ */
   sizeof(iter_pyobj),                  /* @tp_basicsize@ */
@@ -112,7 +112,7 @@ static PyObject *valiter_pynext(PyObject *me)
   return (rc);
 }
 
-static PyTypeObject valiter_pytype_skel = {
+static const PyTypeObject valiter_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "ValueIter",                         /* @tp_name@ */
   sizeof(iter_pyobj),                  /* @tp_basicsize@ */
index b462a1f..f19c9e4 100644 (file)
@@ -218,7 +218,6 @@ void *newtype(PyTypeObject *metaty,
     (PyHeapTypeObject *)_PyObject_GC_Malloc(_PyObject_VAR_SIZE(metaty, 0));
   if (!skel) skel = &emptytype;
   memcpy(ty, skel, sizeof(*skel));
-  if (ty->ht_type.tp_base) Py_INCREF(ty->ht_type.tp_base);
 #define COPY(blah) do {                                                        \
     if (ty->ht_type.tp_as_##blah) {                                    \
       memcpy(&ty->as_##blah,                                           \
@@ -249,9 +248,11 @@ void typeready(PyTypeObject *ty)
   PyDict_SetItemString(ty->tp_dict, "__module__", modname);
 }
 
-PyTypeObject *inittype(PyTypeObject *tyskel, PyTypeObject *meta)
+PyTypeObject *inittype(const PyTypeObject *tyskel,
+                      PyTypeObject *base, PyTypeObject *meta)
 {
   PyTypeObject *ty = newtype(meta, tyskel, 0);
+  if (base) { ty->tp_base = base; Py_INCREF(base); }
   ty->tp_flags |= Py_TPFLAGS_HEAPTYPE;
   typeready(ty);
   return (ty);
index 3076bb5..138a9fb 100644 (file)
@@ -208,11 +208,11 @@ extern void *newtype(PyTypeObject */*meta*/,
 extern void typeready(PyTypeObject *);
   /* The type object is now ready to be used. */
 
-extern PyTypeObject *inittype(PyTypeObject */*skel*/,
+extern PyTypeObject *inittype(const PyTypeObject */*skel*/,
+                             PyTypeObject */*base*/,
                              PyTypeObject */*meta*/);
   /* All-in-one function to construct a working type from a type skeleton
-   * SKEL, with metaclass META.  The caller is expected to have filled in the
-   * direct superclass in SKEL->tp_base.
+   * SKEL, with known base type BASE (null for `object') and metaclass.
    */
 
 /* Alias for built-in types, to fit in with Pyke naming conventions. */
@@ -220,8 +220,7 @@ extern PyTypeObject *inittype(PyTypeObject */*skel*/,
 #define type_pytype &PyType_Type
 
 #define INITTYPE_META(ty, base, meta) do {                             \
-  ty##_pytype_skel.tp_base = base##_pytype;                            \
-  ty##_pytype = inittype(&ty##_pytype_skel, meta##_pytype);            \
+  ty##_pytype = inittype(&ty##_pytype_skel, base##_pytype, meta##_pytype); \
 } while (0)
 #define INITTYPE(ty, base) INITTYPE_META(ty, base, type)
   /* Macros to initialize a type from its skeleton. */
diff --git a/rand.c b/rand.c
index 58c851c..ef4418d 100644 (file)
--- a/rand.c
+++ b/rand.c
@@ -282,7 +282,7 @@ static const PyMethodDef grand_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject grand_pytype_skel = {
+static const PyTypeObject grand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GRand",                             /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -339,7 +339,7 @@ static PyObject *lcrand_pynew(PyTypeObject *me, PyObject *arg, PyObject *kw)
   return (grand_dopywrap(lcrand_pytype, lcrand_create(n), f_freeme));
 }
 
-static PyTypeObject lcrand_pytype_skel = {
+static const PyTypeObject lcrand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "LCRand",                            /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -396,7 +396,7 @@ static PyObject *fibrand_pynew(PyTypeObject *me, PyObject *arg, PyObject *kw)
   return (grand_dopywrap(fibrand_pytype, fibrand_create(n), f_freeme));
 }
 
-static PyTypeObject fibrand_pytype_skel = {
+static const PyTypeObject fibrand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "FibRand",                           /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -526,7 +526,7 @@ static const PyGetSetDef truerand_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject truerand_pytype_skel = {
+static const PyTypeObject truerand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "TrueRand",                          /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -774,7 +774,7 @@ static const PyMethodDef gclatinrand_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gccrand_pytype_skel = {
+static const PyTypeObject gccrand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCCRand",                           /* @tp_name@ */
   sizeof(gccrand_pyobj),               /* @tp_basicsize@ */
@@ -822,7 +822,7 @@ static PyTypeObject gccrand_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gcrand_pytype_skel = {
+static const PyTypeObject gcrand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCRand",                            /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -870,7 +870,7 @@ static PyTypeObject gcrand_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject gclatinrand_pytype_skel = {
+static const PyTypeObject gclatinrand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "GCLatinRand",                       /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -971,7 +971,7 @@ end:
   return (rc);
 }
 
-static PyTypeObject sslprf_pytype_skel = {
+static const PyTypeObject sslprf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "SSLRand",                           /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -1020,7 +1020,7 @@ static PyTypeObject sslprf_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject tlsdx_pytype_skel = {
+static const PyTypeObject tlsdx_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "TLSDataExpansion",                  /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -1069,7 +1069,7 @@ static PyTypeObject tlsdx_pytype_skel = {
   0                                    /* @tp_is_gc@ */
 };
 
-static PyTypeObject tlsprf_pytype_skel = {
+static const PyTypeObject tlsprf_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "TLSPRF",                            /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -1150,7 +1150,7 @@ static const PyGetSetDef dsarand_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject dsarand_pytype_skel = {
+static const PyTypeObject dsarand_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "DSARand",                           /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -1276,7 +1276,7 @@ static const PyGetSetDef bbs_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject bbs_pytype_skel = {
+static const PyTypeObject bbs_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BlumBlumShub",                      /* @tp_name@ */
   sizeof(grand_pyobj),                 /* @tp_basicsize@ */
@@ -1438,7 +1438,7 @@ static const PyGetSetDef bbspriv_pygetset[] = {
   { 0 }
 };
 
-static PyTypeObject bbspriv_pytype_skel = {
+static const PyTypeObject bbspriv_pytype_skel = {
   PyObject_HEAD_INIT(0) 0,             /* Header */
   "BBSPriv",                           /* @tp_name@ */
   sizeof(bbspriv_pyobj),               /* @tp_basicsize@ */
diff --git a/share.c b/share.c
index 5d54947..8c58d23 100644 (file)
--- a/share.c
+++ b/share.c
@@ -61,7 +61,7 @@ static const PyGetSetDef gfshare_pygetset[]= {
   { 0 }
 };
 
-static PyTypeObject gfshare_pytype_skel = {
+static const PyTypeObject gfshare_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "GFShare",                           /* @tp_name@ */
   sizeof(gfshare_pyobj),               /* @tp_basicsize@ */
@@ -149,7 +149,7 @@ static const PyMethodDef gfsharesplit_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject gfsharesplit_pytype_skel = {
+static const PyTypeObject gfsharesplit_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "GFShareSplit",                      /* @tp_name@ */
   sizeof(gfshare_pyobj),               /* @tp_basicsize@ */
@@ -270,7 +270,7 @@ static const PyGetSetDef gfsharejoin_pygetset[]= {
   { 0 }
 };
 
-static PyTypeObject gfsharejoin_pytype_skel = {
+static const PyTypeObject gfsharejoin_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "GFShareJoin",                       /* @tp_name@ */
   sizeof(gfshare_pyobj),               /* @tp_basicsize@ */
@@ -352,7 +352,7 @@ static const PyGetSetDef share_pygetset[]= {
   { 0 }
 };
 
-static PyTypeObject share_pytype_skel = {
+static const PyTypeObject share_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "Share",                             /* @tp_name@ */
   sizeof(share_pyobj),                 /* @tp_basicsize@ */
@@ -445,7 +445,7 @@ static const PyMethodDef sharesplit_pymethods[] = {
   { 0 }
 };
 
-static PyTypeObject sharesplit_pytype_skel = {
+static const PyTypeObject sharesplit_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "ShareSplit",                                /* @tp_name@ */
   sizeof(share_pyobj),                 /* @tp_basicsize@ */
@@ -568,7 +568,7 @@ static const PyGetSetDef sharejoin_pygetset[]= {
   { 0 }
 };
 
-static PyTypeObject sharejoin_pytype_skel = {
+static const PyTypeObject sharejoin_pytype_skel = {
   PyObject_HEAD_INIT(&PyType_Type) 0,  /* Header */
   "ShareJoin",                         /* @tp_name@ */
   sizeof(share_pyobj),                 /* @tp_basicsize@ */