From: Neil Schemenauer <nascheme@enme.ucalgary.ca>
Date: Mon, 18 Nov 2002 16:09:38 +0000 (+0000)
Subject: Add nb_remainder (i.e. __mod__) slot to str type.  Fixes SF bug #615506.
X-Git-Tag: v2.3c1~3372
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a6cd4e65d7faef4928f86ad728c32dcf24b80fb5;p=python

Add nb_remainder (i.e. __mod__) slot to str type.  Fixes SF bug #615506.
---

diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index bf8bad53a8..c234b0443b 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -3126,9 +3126,28 @@ basestring_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 	return NULL;
 }
 
+static PyObject *
+string_mod(PyObject *v, PyObject *w)
+{
+	if (!PyString_Check(v)) {
+		Py_INCREF(Py_NotImplemented);
+		return Py_NotImplemented;
+	}
+	return PyString_Format(v, w);
+}
+
 PyDoc_STRVAR(basestring_doc,
 "Type basestring cannot be instantiated; it is the base for str and unicode.");
 
+static PyNumberMethods string_as_number = {
+	0,			/*nb_add*/
+	0,			/*nb_subtract*/
+	0,			/*nb_multiply*/
+	0, 			/*nb_divide*/
+	string_mod,		/*nb_remainder*/
+};
+
+
 PyTypeObject PyBaseString_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0,
@@ -3190,7 +3209,7 @@ PyTypeObject PyString_Type = {
 	0,					/* tp_setattr */
 	0,					/* tp_compare */
 	(reprfunc)string_repr, 			/* tp_repr */
-	0,					/* tp_as_number */
+	&string_as_number,			/* tp_as_number */
 	&string_as_sequence,			/* tp_as_sequence */
 	&string_as_mapping,			/* tp_as_mapping */
 	(hashfunc)string_hash, 			/* tp_hash */
@@ -3199,7 +3218,8 @@ PyTypeObject PyString_Type = {
 	PyObject_GenericGetAttr,		/* tp_getattro */
 	0,					/* tp_setattro */
 	&string_as_buffer,			/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
+	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES | 
+		Py_TPFLAGS_BASETYPE,		/* tp_flags */
 	string_doc,				/* tp_doc */
 	0,					/* tp_traverse */
 	0,					/* tp_clear */