diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 3f1e482..fcd50cd 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -1,6 +1,7 @@
 /* String object implementation */
 
 #define PY_SSIZE_T_CLEAN
+
 #include "Python.h"
 
 #include <ctype.h>
@@ -1485,7 +1486,7 @@
 #define RSKIP_SPACE(s, i)        { while (i>=0  &&  isspace(Py_CHARMASK(s[i]))) i--; }
 #define RSKIP_NONSPACE(s, i)     { while (i>=0  && !isspace(Py_CHARMASK(s[i]))) i--; }
 
-static PyObject *
+Py_LOCAL(PyObject *)
 split_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
 {
 	Py_ssize_t i, j, count=0;
@@ -1519,7 +1520,7 @@
 	return NULL;
 }
 
-static PyObject *
+Py_LOCAL(PyObject *)
 split_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
 {
 	register Py_ssize_t i, j, count=0;
@@ -1674,7 +1675,7 @@
 	return out;
 }
 
-static PyObject *
+Py_LOCAL(PyObject *)
 rsplit_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
 {
 	Py_ssize_t i, j, count=0;
@@ -1710,7 +1711,7 @@
 	return NULL;
 }
 
-static PyObject *
+Py_LOCAL(PyObject *)
 rsplit_char(const char *s, Py_ssize_t len, char ch, Py_ssize_t maxcount)
 {
 	register Py_ssize_t i, j, count=0;
@@ -1923,7 +1924,7 @@
 	return string_join((PyStringObject *)sep, x);
 }
 
-static void
+Py_LOCAL(void)
 string_adjust_indices(Py_ssize_t *start, Py_ssize_t *end, Py_ssize_t len)
 {
 	if (*end > len)
@@ -1938,7 +1939,7 @@
 		*start = 0;
 }
 
-static Py_ssize_t
+Py_LOCAL(Py_ssize_t)
 string_find_internal(PyStringObject *self, PyObject *args, int dir)
 {
 	const char *s = PyString_AS_STRING(self), *sub;
@@ -2074,7 +2075,7 @@
 }
 
 
-static PyObject *
+Py_LOCAL(PyObject *)
 do_xstrip(PyStringObject *self, int striptype, PyObject *sepobj)
 {
 	char *s = PyString_AS_STRING(self);
@@ -2107,7 +2108,7 @@
 }
 
 
-static PyObject *
+Py_LOCAL(PyObject *)
 do_strip(PyStringObject *self, int striptype)
 {
 	char *s = PyString_AS_STRING(self);
@@ -2137,7 +2138,7 @@
 }
 
 
-static PyObject *
+Py_LOCAL(PyObject *)
 do_argstrip(PyStringObject *self, int striptype, PyObject *args)
 {
 	PyObject *sep = NULL;
@@ -2600,7 +2601,7 @@
 
 /* String ops must return a string.  */
 /* If the object is subclass of string, create a copy */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 return_self(PyStringObject *self)
 {
 	if (PyString_CheckExact(self)) {
@@ -2612,7 +2613,7 @@
 		PyString_GET_SIZE(self));
 }
 
-static Py_ssize_t
+Py_LOCAL(Py_ssize_t)
 countchar(char *target, int target_len, char c)
 {
 	Py_ssize_t count=0;
@@ -2627,7 +2628,7 @@
 	return count;
 }
 
-static Py_ssize_t
+Py_LOCAL(Py_ssize_t)
 findstring(char *target, Py_ssize_t target_len,
 	   char *pattern, Py_ssize_t pattern_len,
 	   Py_ssize_t start,
@@ -2665,7 +2666,7 @@
 	return -1;
 }
 
-Py_ssize_t
+Py_LOCAL(Py_ssize_t)
 countstring(char *target, Py_ssize_t target_len,
 	    char *pattern, Py_ssize_t pattern_len,
 	    Py_ssize_t start,
@@ -2713,7 +2714,7 @@
 /* Algorithms for difference cases of string replacement */
 
 /* len(self)>=1, from="", len(to)>=1, maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_interleave(PyStringObject *self,
 		   PyStringObject *to,
 		   Py_ssize_t maxcount)
@@ -2776,7 +2777,7 @@
 
 /* Special case for deleting a single character */
 /* len(self)>=1, len(from)==1, to="", maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_delete_single_character(PyStringObject *self,
 				char from_c, Py_ssize_t maxcount)
 {
@@ -2821,7 +2822,7 @@
 
 /* len(self)>=1, len(from)>=2, to="", maxcount>=1 */
 
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_delete_substring(PyStringObject *self, PyStringObject *from,
 			 Py_ssize_t maxcount) {
 	char *self_s, *from_s, *result_s;
@@ -2876,7 +2877,7 @@
 }
 
 /* len(self)>=1, len(from)==len(to)==1, maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_single_character_in_place(PyStringObject *self,
 				  char from_c, char to_c,
 				  Py_ssize_t maxcount)
@@ -2921,7 +2922,7 @@
 }
 
 /* len(self)>=1, len(from)==len(to)>=2, maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_substring_in_place(PyStringObject *self,
 			   PyStringObject *from,
 			   PyStringObject *to,
@@ -2978,7 +2979,7 @@
 }
 
 /* len(self)>=1, len(from)==1, len(to)>=2, maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_single_character(PyStringObject *self,
 			 char from_c,
 			 PyStringObject *to,
@@ -3051,7 +3052,7 @@
 }
 
 /* len(self)>=1, len(from)>=2, len(to)>=2, maxcount>=1 */
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace_substring(PyStringObject *self,
 		  PyStringObject *from,
 		  PyStringObject *to,
@@ -3129,7 +3130,7 @@
 }
 
 
-static PyStringObject *
+Py_LOCAL(PyStringObject *)
 replace(PyStringObject *self,
 	PyStringObject *from,
 	PyStringObject *to,
@@ -3490,7 +3491,7 @@
     return u;
 }
 
-static PyObject *
+Py_LOCAL(PyObject *)
 pad(PyStringObject *self, Py_ssize_t left, Py_ssize_t right, char fill)
 {
     PyObject *u;
@@ -4241,7 +4242,7 @@
 
 /* Helpers for formatstring */
 
-static PyObject *
+Py_LOCAL(PyObject *)
 getnextarg(PyObject *args, Py_ssize_t arglen, Py_ssize_t *p_argidx)
 {
 	Py_ssize_t argidx = *p_argidx;
@@ -4270,7 +4271,7 @@
 #define F_ALT	(1<<3)
 #define F_ZERO	(1<<4)
 
-static int
+Py_LOCAL(int)
 formatfloat(char *buf, size_t buflen, int flags,
             int prec, int type, PyObject *v)
 {
@@ -4457,7 +4458,7 @@
 	return result;
 }
 
-static int
+Py_LOCAL(int)
 formatint(char *buf, size_t buflen, int flags,
           int prec, int type, PyObject *v)
 {
@@ -4529,7 +4530,7 @@
 	return (int)strlen(buf);
 }
 
-static int
+Py_LOCAL(int)
 formatchar(char *buf, size_t buflen, PyObject *v)
 {
 	/* presume that the buffer is at least 2 characters long */
