X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/ef783f91d10008e1859fc52de1fb66a5cd292320..8aafc119905401cd820194d547018043510b1f88:/pgen.c diff --git a/pgen.c b/pgen.c index 98daa73..777ec32 100644 --- a/pgen.c +++ b/pgen.c @@ -100,12 +100,12 @@ static PyObject *pfmeth_jump(PyObject *me, PyObject *arg) RETURN_ME; } -static PyObject *meth__PrimeFilter_smallfactor(PyObject *me, PyObject *arg) +static PyObject *pfmeth_smallfactor(PyObject *me, PyObject *arg) { mp *x = 0; PyObject *rc = 0; - if (!PyArg_ParseTuple(arg, "OO&:smallfactor", &me, convmp, &x)) goto end; + if (!PyArg_ParseTuple(arg, "O&:smallfactor", convmp, &x)) goto end; rc = PyInt_FromLong(pfilt_smallfactor(x)); end: mp_drop(x); @@ -134,7 +134,7 @@ static PyObject *pfget_x(PyObject *me, void *hunoz) static PyObject *pfget_status(PyObject *me, void *hunoz) { return (PyInt_FromLong(PFILT_ST(me))); } -static PyGetSetDef pfilt_pygetset[] = { +static const PyGetSetDef pfilt_pygetset[] = { #define GETSETNAME(op, name) pf##op##_##name GET (x, "F.x -> current position of filter") GET (status, "F.status -> primality status of filter") @@ -142,16 +142,17 @@ static PyGetSetDef pfilt_pygetset[] = { { 0 } }; -static PyMethodDef pfilt_pymethods[] = { +static const PyMethodDef pfilt_pymethods[] = { #define METHNAME(name) pfmeth_##name METH (step, "F.step(N)") METH (muladd, "F.muladd(M, A)") METH (jump, "F.jump(FF)") + SMTH (smallfactor, "smallfactor(X) -> PGST") #undef METHNAME { 0 } }; -static PyNumberMethods pfilt_pynumber = { +static const PyNumberMethods pfilt_pynumber = { 0, /* @nb_add@ */ 0, /* @nb_subtract@ */ 0, /* @nb_multiply@ */ @@ -194,8 +195,8 @@ static PyNumberMethods pfilt_pynumber = { 0, /* @nb_inplace_true_divide@ */ }; -static PyTypeObject pfilt_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pfilt_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeFilter", /* @tp_name@ */ sizeof(pfilt_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -206,7 +207,7 @@ static PyTypeObject pfilt_pytype_skel = { 0, /* @tp_setattr@ */ 0, /* @tp_compare@ */ 0, /* @tp_repr@ */ - &pfilt_pynumber, /* @tp_as_number@ */ + PYNUMBER(pfilt), /* @tp_as_number@ */ 0, /* @tp_as_sequence@ */ 0, /* @tp_as_mapping@ */ 0, /* @tp_hash@ */ @@ -227,9 +228,9 @@ static PyTypeObject pfilt_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - pfilt_pymethods, /* @tp_methods@ */ + PYMETHODS(pfilt), /* @tp_methods@ */ 0, /* @tp_members@ */ - pfilt_pygetset, /* @tp_getset@ */ + PYGETSET(pfilt), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -303,15 +304,15 @@ static PyObject *rget_niters(PyObject *me, void *hunoz) static PyObject *rget_x(PyObject *me, void *hunoz) { return (mp_pywrap(MP_COPY(RABIN_R(me)->mm.m))); } -static PyObject *meth__RabinMiller_iters(PyObject *me, PyObject *arg) +static PyObject *rmeth_iters(PyObject *me, PyObject *arg) { unsigned n; - if (!PyArg_ParseTuple(arg, "OO&:iters", &me, convuint, &n)) return (0); + if (!PyArg_ParseTuple(arg, "O&:iters", convuint, &n)) return (0); return (PyInt_FromLong(rabin_iters(n))); } -static PyGetSetDef rabin_pygetset[] = { +static const PyGetSetDef rabin_pygetset[] = { #define GETSETNAME(op, name) r##op##_##name GET (x, "R.x -> number under test") GET (niters, "R.niters -> suggested number of tests") @@ -319,16 +320,17 @@ static PyGetSetDef rabin_pygetset[] = { { 0 } }; -static PyMethodDef rabin_pymethods[] = { +static const PyMethodDef rabin_pymethods[] = { #define METHNAME(name) rmeth_##name METH (test, "R.test(W) -> PGST") METH (rtest, "R.rtest(W) -> PGST") + SMTH (iters, "iters(NBITS) -> NITERS") #undef METHNAME { 0 } }; -static PyTypeObject rabin_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject rabin_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "RabinMiller", /* @tp_name@ */ sizeof(rabin_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -360,9 +362,9 @@ static PyTypeObject rabin_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - rabin_pymethods, /* @tp_methods@ */ + PYMETHODS(rabin), /* @tp_methods@ */ 0, /* @tp_members@ */ - rabin_pygetset, /* @tp_getset@ */ + PYGETSET(rabin), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -406,8 +408,7 @@ static void pgevent_kill(PyObject *me) static void pgevent_pydealloc(PyObject *me) { pgevent_pyobj *ev = (pgevent_pyobj *)me; - if (ev->r) Py_DECREF(ev->r); - FREEOBJ(me); + Py_XDECREF(ev->r); FREEOBJ(me); } #define PGEVENT_CHECK(me) do { \ @@ -418,7 +419,7 @@ static void pgevent_pydealloc(PyObject *me) } while (0) static PyObject *peget_name(PyObject *me, void *hunoz) - { PGEVENT_CHECK(me); return (PyString_FromString(PGEVENT_EV(me)->name)); } + { PGEVENT_CHECK(me); return (TEXT_FROMSTR(PGEVENT_EV(me)->name)); } static PyObject *peget_x(PyObject *me, void *hunoz) { PGEVENT_CHECK(me); return (mp_pywrap(MP_COPY(PGEVENT_EV(me)->m))); } @@ -454,7 +455,7 @@ end: return (rc); } -static PyGetSetDef pgevent_pygetset[] = { +static const PyGetSetDef pgevent_pygetset[] = { #define GETSETNAME(op, name) pe##op##_##name GET (name, "EV.name -> value being generated") GETSET(x, "EV.x -> value under test") @@ -465,8 +466,8 @@ static PyGetSetDef pgevent_pygetset[] = { { 0 } }; -static PyTypeObject pgevent_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pgevent_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeGenEvent", /* @tp_name@ */ sizeof(pgevent_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -500,7 +501,7 @@ static PyTypeObject pgevent_pytype_skel = { 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ - pgevent_pygetset, /* @tp_getset@ */ + PYGETSET(pgevent), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -632,7 +633,7 @@ PGMETH(fail, FAIL) static PyObject *pgev_stdev(pgen_proc *proc) { pgev pg; pg.proc = proc; pg.ctx = 0; return (pgev_pywrap(&pg)); } -static PyMethodDef pgev_pymethods[] = { +static const PyMethodDef pgev_pymethods[] = { #define METHNAME(name) pgmeth_##name METH (pg_abort, "E.pg_abort(EV) -> PGST -- prime generation aborted") METH (pg_done, "E.pg_done(EV) -> PGST -- prime generation finished") @@ -644,8 +645,8 @@ static PyMethodDef pgev_pymethods[] = { { 0 } }; -static PyTypeObject pgev_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pgev_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeGenBuiltinHandler", /* @tp_name@ */ sizeof(pgev_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -677,7 +678,7 @@ static PyTypeObject pgev_pytype_skel = { 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ 0, /* @tp_iternext@ */ - pgev_pymethods, /* @tp_methods@ */ + PYMETHODS(pgev), /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ @@ -711,15 +712,15 @@ end: static PyObject *psget_step(PyObject *me, void *hunoz) { return (PyInt_FromLong(PGSTEP_STEP(me))); } -static PyGetSetDef pgstep_pygetset[] = { +static const PyGetSetDef pgstep_pygetset[] = { #define GETSETNAME(op, name) ps##op##_##name GET (step, "S.step -> step size for the stepper") #undef GETSETNAME { 0 } }; -static PyTypeObject pgstep_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pgstep_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeGenStepper", /* @tp_name@ */ sizeof(pgstep_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -753,7 +754,7 @@ static PyTypeObject pgstep_pytype_skel = { 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ - pgstep_pygetset, /* @tp_getset@ */ + PYGETSET(pgstep), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -793,15 +794,15 @@ static void pgjump_pydealloc(PyObject *me) static PyObject *pjget_jump(PyObject *me, void *hunoz) { RETURN_OBJ(PGJUMP_FOBJ(me)); } -static PyGetSetDef pgjump_pygetset[] = { +static const PyGetSetDef pgjump_pygetset[] = { #define GETSETNAME(op, name) pj##op##_##name GET (jump, "S.jump -> jump size for the stepper") #undef GETSETNAME { 0 } }; -static PyTypeObject pgjump_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pgjump_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeGenJumper", /* @tp_name@ */ sizeof(pgjump_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -836,7 +837,7 @@ static PyTypeObject pgjump_pytype_skel = { 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ - pgjump_pygetset, /* @tp_getset@ */ + PYGETSET(pgjump), /* @tp_getset@ */ 0, /* @tp_base@ */ 0, /* @tp_dict@ */ 0, /* @tp_descr_get@ */ @@ -862,8 +863,8 @@ end: return ((PyObject *)rc); } -static PyTypeObject pgtest_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ +static const PyTypeObject pgtest_pytype_skel = { + PyVarObject_HEAD_INIT(0, 0) /* Header */ "PrimeGenTester", /* @tp_name@ */ sizeof(pgtest_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1050,10 +1051,14 @@ end: /*----- Global stuff ------------------------------------------------------*/ -static PyMethodDef methods[] = { +static const struct nameval consts[] = { + CONST(PGEN_PASS), CONST(PGEN_FAIL), CONST(PGEN_BEGIN), CONST(PGEN_TRY), + CONST(PGEN_DONE), CONST(PGEN_ABORT), + { 0 } +}; + +static const PyMethodDef methods[] = { #define METHNAME(name) meth_##name - METH (_PrimeFilter_smallfactor, "smallfactor(X) -> PGRC") - METH (_RabinMiller_iters, "iters(NBITS) -> NITERS") KWMETH(pgen, "pgen(START, [name = 'p'], [stepper = PrimeGenStepper(2)],\n" " [tester = PrimeGenTester()], [event = pgen_nullev],\n" @@ -1099,6 +1104,7 @@ void pgen_pyinsert(PyObject *mod) INSERT("pgen_stdev", pgev_stdev(pgen_ev)); INSERT("pgen_spinev", pgev_stdev(pgen_evspin)); INSERT("pgen_subev", pgev_stdev(pgen_subev)); + setconstants(mod, consts); } /*----- That's all, folks -------------------------------------------------*/