From d7e1b2bd17cee31bb581a71fff20101be0b34bc6 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 28 Jan 2008 02:07:53 +0000 Subject: static PyObject* variables should use PyString_InternFromString() instead of PyObject_FromString() to store a python string in a function level static var. --- Modules/_ctypes/_ctypes.c | 6 +++--- Modules/_ctypes/callbacks.c | 4 ++-- Objects/abstract.c | 4 ++-- Objects/complexobject.c | 13 +++++++------ Objects/fileobject.c | 2 +- Python/compile.c | 4 ++-- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index fd043d6..0f88f96 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -1529,9 +1529,9 @@ static PyObject *CreateSwappedType(PyTypeObject *type, PyObject *args, PyObject if (suffix == NULL) #ifdef WORDS_BIGENDIAN - suffix = PyString_FromString("_le"); + suffix = PyString_InternFromString("_le"); #else - suffix = PyString_FromString("_be"); + suffix = PyString_InternFromString("_be"); #endif Py_INCREF(name); @@ -4416,7 +4416,7 @@ Simple_repr(CDataObject *self) } if (format == NULL) { - format = PyString_FromString("%s(%r)"); + format = PyString_InternFromString("%s(%r)"); if (format == NULL) return NULL; } diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 6d2e133..21637ad 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -368,7 +368,7 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) static PyObject *context; if (context == NULL) - context = PyString_FromString("_ctypes.DllGetClassObject"); + context = PyString_InternFromString("_ctypes.DllGetClassObject"); mod = PyImport_ImportModuleNoBlock("ctypes"); if (!mod) { @@ -447,7 +447,7 @@ long Call_CanUnloadNow(void) static PyObject *context; if (context == NULL) - context = PyString_FromString("_ctypes.DllCanUnloadNow"); + context = PyString_InternFromString("_ctypes.DllCanUnloadNow"); mod = PyImport_ImportModuleNoBlock("ctypes"); if (!mod) { diff --git a/Objects/abstract.c b/Objects/abstract.c index 4c8ef83..830fe82 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2142,7 +2142,7 @@ abstract_get_bases(PyObject *cls) PyObject *bases; if (__bases__ == NULL) { - __bases__ = PyString_FromString("__bases__"); + __bases__ = PyString_InternFromString("__bases__"); if (__bases__ == NULL) return NULL; } @@ -2220,7 +2220,7 @@ recursive_isinstance(PyObject *inst, PyObject *cls, int recursion_depth) int retval = 0; if (__class__ == NULL) { - __class__ = PyString_FromString("__class__"); + __class__ = PyString_InternFromString("__class__"); if (__class__ == NULL) return -1; } diff --git a/Objects/complexobject.c b/Objects/complexobject.c index 03b80c8..4777ed1 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -261,14 +261,19 @@ PyComplex_AsCComplex(PyObject *op) return ((PyComplexObject *)op)->cval; } /* If not, use op's __complex__ method, if it exists */ - + /* return -1 on failure */ cv.real = -1.; cv.imag = 0.; + + if (complex_str == NULL) { + if (!(complex_str = PyString_InternFromString("__complex__"))) + return cv; + } if (PyInstance_Check(op)) { /* this can go away in python 3000 */ - if (PyObject_HasAttrString(op, "__complex__")) { + if (PyObject_HasAttr(op, complex_str)) { newop = PyObject_CallMethod(op, "__complex__", NULL); if (!newop) return cv; @@ -276,10 +281,6 @@ PyComplex_AsCComplex(PyObject *op) /* else try __float__ */ } else { PyObject *complexfunc; - if (!complex_str) { - if (!(complex_str = PyString_FromString("__complex__"))) - return cv; - } complexfunc = _PyType_Lookup(op->ob_type, complex_str); /* complexfunc is a borrowed reference */ if (complexfunc) { diff --git a/Objects/fileobject.c b/Objects/fileobject.c index a5a42fc..eb05cda 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -1965,7 +1965,7 @@ file_new(PyTypeObject *type, PyObject *args, PyObject *kwds) assert(type != NULL && type->tp_alloc != NULL); if (not_yet_string == NULL) { - not_yet_string = PyString_FromString(""); + not_yet_string = PyString_InternFromString(""); if (not_yet_string == NULL) return NULL; } diff --git a/Python/compile.c b/Python/compile.c index aee7bda..3501b95 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1153,7 +1153,7 @@ compiler_mod(struct compiler *c, mod_ty mod) int addNone = 1; static PyObject *module; if (!module) { - module = PyString_FromString(""); + module = PyString_InternFromString(""); if (!module) return NULL; } @@ -2001,7 +2001,7 @@ compiler_assert(struct compiler *c, stmt_ty s) if (Py_OptimizeFlag) return 1; if (assertion_error == NULL) { - assertion_error = PyString_FromString("AssertionError"); + assertion_error = PyString_InternFromString("AssertionError"); if (assertion_error == NULL) return 0; } -- cgit v0.12