From 40c48685a2b16dc7fdccd82fe1d927e52ed5e3db Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Mon, 3 Jul 2000 18:11:56 +0000 Subject: [PATCH] ANSI-fication, remove Py_PROTO, etc. Revise math_1(), math_2(), stub-generating macros, and function tables to use PyArg_ParseTuple() and properly provide the function name for error message generation. Fix pow() docstring for MPW 3.1; had said "power" instead of "pow". --- Modules/mathmodule.c | 158 ++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 84 deletions(-) diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index e8ef9909543..c4ff6650f98 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -16,10 +16,10 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. #ifndef _MSC_VER #ifndef __STDC__ -extern double fmod Py_PROTO((double, double)); -extern double frexp Py_PROTO((double, int *)); -extern double ldexp Py_PROTO((double, int)); -extern double modf Py_PROTO((double, double *)); +extern double fmod (double, double); +extern double frexp (double, int *); +extern double ldexp (double, int); +extern double modf (double, double *); #endif /* __STDC__ */ #endif /* _MSC_VER */ @@ -51,12 +51,10 @@ math_error() } static PyObject * -math_1(args, func) - PyObject *args; - double (*func) Py_FPROTO((double)); +math_1(PyObject *args, double (*func) (double), char *argsfmt) { double x; - if (! PyArg_Parse(args, "d", &x)) + if (! PyArg_ParseTuple(args, argsfmt, &x)) return NULL; errno = 0; PyFPE_START_PROTECT("in math_1", return 0) @@ -70,12 +68,10 @@ math_1(args, func) } static PyObject * -math_2(args, func) - PyObject *args; - double (*func) Py_FPROTO((double, double)); +math_2(PyObject *args, double (*func) (double, double), char *argsfmt) { double x, y; - if (! PyArg_Parse(args, "(dd)", &x, &y)) + if (! PyArg_ParseTuple(args, argsfmt, &x, &y)) return NULL; errno = 0; PyFPE_START_PROTECT("in math_2", return 0) @@ -88,77 +84,75 @@ math_2(args, func) return PyFloat_FromDouble(x); } -#define FUNC1(stubname, func, docstring_name, docstring) \ - static PyObject * stubname(self, args) PyObject *self, *args; { \ - return math_1(args, func); \ +#define FUNC1(funcname, func, docstring) \ + static PyObject * math_##funcname(PyObject *self, PyObject *args) { \ + return math_1(args, func, "d:" #funcname); \ }\ - static char docstring_name [] = docstring; + static char math_##funcname##_doc [] = docstring; -#define FUNC2(stubname, func, docstring_name, docstring) \ - static PyObject * stubname(self, args) PyObject *self, *args; { \ - return math_2(args, func); \ +#define FUNC2(funcname, func, docstring) \ + static PyObject * math_##funcname(PyObject *self, PyObject *args) { \ + return math_2(args, func, "dd:" #funcname); \ }\ - static char docstring_name [] = docstring; + static char math_##funcname##_doc [] = docstring; -FUNC1(math_acos, acos, math_acos_doc, +FUNC1(acos, acos, "acos(x)\n\nReturn the arc cosine of x.") -FUNC1(math_asin, asin, math_asin_doc, +FUNC1(asin, asin, "asin(x)\n\nReturn the arc sine of x.") -FUNC1(math_atan, atan, math_atan_doc, +FUNC1(atan, atan, "atan(x)\n\nReturn the arc tangent of x.") -FUNC2(math_atan2, atan2, math_atan2_doc, +FUNC2(atan2, atan2, "atan2(y, x)\n\nReturn atan(y/x).") -FUNC1(math_ceil, ceil, math_ceil_doc, +FUNC1(ceil, ceil, "ceil(x)\n\nReturn the ceiling of x as a real.") -FUNC1(math_cos, cos, math_cos_doc, +FUNC1(cos, cos, "cos(x)\n\nReturn the cosine of x.") -FUNC1(math_cosh, cosh, math_cosh_doc, +FUNC1(cosh, cosh, "cosh(x)\n\nReturn the hyperbolic cosine of x.") -FUNC1(math_exp, exp, math_exp_doc, +FUNC1(exp, exp, "exp(x)\n\nReturn e raised to the power of x.") -FUNC1(math_fabs, fabs, math_fabs_doc, +FUNC1(fabs, fabs, "fabs(x)\n\nReturn the absolute value of the real x.") -FUNC1(math_floor, floor, math_floor_doc, +FUNC1(floor, floor, "floor(x)\n\nReturn the floor of x as a real.") -FUNC2(math_fmod, fmod, math_fmod_doc, + FUNC2(fmod, fmod, "fmod(x,y)\n\nReturn x % y.") -FUNC2(math_hypot, hypot, math_hypot_doc, +FUNC2(hypot, hypot, "hypot(x,y)\n\nReturn the Euclidean distance, sqrt(x*x + y*y).") -FUNC1(math_log, log, math_log_doc, +FUNC1(log, log, "log(x)\n\nReturn the natural logarithm of x.") -FUNC1(math_log10, log10, math_log10_doc, +FUNC1(log10, log10, "log10(x)\n\nReturn the base-10 logarithm of x.") #ifdef MPW_3_1 /* This hack is needed for MPW 3.1 but not for 3.2 ... */ -FUNC2(math_pow, power, math_pow_doc, - "power(x,y)\n\nReturn x**y.") +FUNC2(pow, power, + "pow(x,y)\n\nReturn x**y.") #else -FUNC2(math_pow, pow, math_pow_doc, +FUNC2(pow, pow, "pow(x,y)\n\nReturn x**y.") #endif #ifdef HAVE_RINT -FUNC1(math_rint, rint, math_rint_doc, +FUNC1(rint, rint, "rint(x)\n\nReturn the integer nearest to x as a real.") #endif -FUNC1(math_sin, sin, math_sin_doc, +FUNC1(sin, sin, "sin(x)\n\nReturn the sine of x.") -FUNC1(math_sinh, sinh, math_sinh_doc, +FUNC1(sinh, sinh, "sinh(x)\n\nReturn the hyperbolic sine of x.") -FUNC1(math_sqrt, sqrt, math_sqrt_doc, +FUNC1(sqrt, sqrt, "sqrt(x)\n\nReturn the square root of x.") -FUNC1(math_tan, tan, math_tan_doc, +FUNC1(tan, tan, "tan(x)\n\nReturn the tangent of x.") -FUNC1(math_tanh, tanh, math_tanh_doc, +FUNC1(tanh, tanh, "tanh(x)\n\nReturn the hyperbolic tangent of x.") static PyObject * -math_frexp(self, args) - PyObject *self; - PyObject *args; +math_frexp(PyObject *self, PyObject *args) { double x; int i; - if (! PyArg_Parse(args, "d", &x)) + if (! PyArg_ParseTuple(args, "d:frexp", &x)) return NULL; errno = 0; x = frexp(x, &i); @@ -177,13 +171,11 @@ If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0."; static PyObject * -math_ldexp(self, args) - PyObject *self; - PyObject *args; +math_ldexp(PyObject *self, PyObject *args) { double x; int exp; - if (! PyArg_Parse(args, "(di)", &x, &exp)) + if (! PyArg_ParseTuple(args, "di:ldexp", &x, &exp)) return NULL; errno = 0; PyFPE_START_PROTECT("ldexp", return 0) @@ -203,20 +195,18 @@ Return x * (2**i)."; static PyObject * -math_modf(self, args) - PyObject *self; - PyObject *args; +math_modf(PyObject *self, PyObject *args) { double x, y; - if (! PyArg_Parse(args, "d", &x)) + if (! PyArg_ParseTuple(args, "d:modf", &x)) return NULL; errno = 0; #ifdef MPW /* MPW C modf expects pointer to extended as second argument */ -{ - extended e; - x = modf(x, &e); - y = e; -} + { + extended e; + x = modf(x, &e); + y = e; + } #else x = modf(x, &y); #endif @@ -234,32 +224,32 @@ of x. The integer part is returned as a real."; static PyMethodDef math_methods[] = { - {"acos", math_acos, 0, math_acos_doc}, - {"asin", math_asin, 0, math_asin_doc}, - {"atan", math_atan, 0, math_atan_doc}, - {"atan2", math_atan2, 0, math_atan2_doc}, - {"ceil", math_ceil, 0, math_ceil_doc}, - {"cos", math_cos, 0, math_cos_doc}, - {"cosh", math_cosh, 0, math_cosh_doc}, - {"exp", math_exp, 0, math_exp_doc}, - {"fabs", math_fabs, 0, math_fabs_doc}, - {"floor", math_floor, 0, math_floor_doc}, - {"fmod", math_fmod, 0, math_fmod_doc}, - {"frexp", math_frexp, 0, math_frexp_doc}, - {"hypot", math_hypot, 0, math_hypot_doc}, - {"ldexp", math_ldexp, 0, math_ldexp_doc}, - {"log", math_log, 0, math_log_doc}, - {"log10", math_log10, 0, math_log10_doc}, - {"modf", math_modf, 0, math_modf_doc}, - {"pow", math_pow, 0, math_pow_doc}, + {"acos", math_acos, METH_VARARGS, math_acos_doc}, + {"asin", math_asin, METH_VARARGS, math_asin_doc}, + {"atan", math_atan, METH_VARARGS, math_atan_doc}, + {"atan2", math_atan2, METH_VARARGS, math_atan2_doc}, + {"ceil", math_ceil, METH_VARARGS, math_ceil_doc}, + {"cos", math_cos, METH_VARARGS, math_cos_doc}, + {"cosh", math_cosh, METH_VARARGS, math_cosh_doc}, + {"exp", math_exp, METH_VARARGS, math_exp_doc}, + {"fabs", math_fabs, METH_VARARGS, math_fabs_doc}, + {"floor", math_floor, METH_VARARGS, math_floor_doc}, + {"fmod", math_fmod, METH_VARARGS, math_fmod_doc}, + {"frexp", math_frexp, METH_VARARGS, math_frexp_doc}, + {"hypot", math_hypot, METH_VARARGS, math_hypot_doc}, + {"ldexp", math_ldexp, METH_VARARGS, math_ldexp_doc}, + {"log", math_log, METH_VARARGS, math_log_doc}, + {"log10", math_log10, METH_VARARGS, math_log10_doc}, + {"modf", math_modf, METH_VARARGS, math_modf_doc}, + {"pow", math_pow, METH_VARARGS, math_pow_doc}, #ifdef HAVE_RINT - {"rint", math_rint, 0, math_rint_doc}, + {"rint", math_rint, METH_VARARGS, math_rint_doc}, #endif - {"sin", math_sin, 0, math_sin_doc}, - {"sinh", math_sinh, 0, math_sinh_doc}, - {"sqrt", math_sqrt, 0, math_sqrt_doc}, - {"tan", math_tan, 0, math_tan_doc}, - {"tanh", math_tanh, 0, math_tanh_doc}, + {"sin", math_sin, METH_VARARGS, math_sin_doc}, + {"sinh", math_sinh, METH_VARARGS, math_sinh_doc}, + {"sqrt", math_sqrt, METH_VARARGS, math_sqrt_doc}, + {"tan", math_tan, METH_VARARGS, math_tan_doc}, + {"tanh", math_tanh, METH_VARARGS, math_tanh_doc}, {NULL, NULL} /* sentinel */ };