diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py index adab767230b..c2996fc3a25 100644 --- a/Lib/sre_compile.py +++ b/Lib/sre_compile.py @@ -12,6 +12,8 @@ import _sre from sre_constants import * +assert _sre.MAGIC == MAGIC, "SRE module mismatch" + MAXCODE = 65535 def _compile(code, pattern, flags): diff --git a/Lib/sre_constants.py b/Lib/sre_constants.py index a5e4bb8c1e3..b429a33cbf0 100644 --- a/Lib/sre_constants.py +++ b/Lib/sre_constants.py @@ -9,8 +9,15 @@ # See the sre.py file for information on usage and redistribution. # +# update when constants are added or removed + +MAGIC = 20010115 + +# max code word in this release + MAXREPEAT = 65535 +# SRE standard exception (access as sre.error) # should this really be here? class error(Exception): @@ -211,6 +218,8 @@ if __name__ == "__main__": """) + f.write("#define SRE_MAGIC %d\n" % MAGIC) + dump(f, OPCODES, "SRE_OP") dump(f, ATCODES, "SRE") dump(f, CHCODES, "SRE") diff --git a/Modules/_sre.c b/Modules/_sre.c index b040d873933..efb704bdf57 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2355,11 +2355,19 @@ __declspec(dllexport) #endif init_sre(void) { + PyObject* m; + PyObject* d; + /* Patch object types */ Pattern_Type.ob_type = Match_Type.ob_type = Scanner_Type.ob_type = &PyType_Type; - Py_InitModule("_" MODULE, _functions); + m = Py_InitModule("_" MODULE, _functions); + d = PyModule_GetDict(m); + + PyDict_SetItemString( + d, "MAGIC", (PyObject*) PyInt_FromLong(SRE_MAGIC) + ); } #endif /* !defined(SRE_RECURSIVE) */ diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h index 6cad0899c63..c6850ad69be 100644 --- a/Modules/sre_constants.h +++ b/Modules/sre_constants.h @@ -11,6 +11,7 @@ * See the _sre.c file for information on usage and redistribution. */ +#define SRE_MAGIC 20010115 #define SRE_OP_FAILURE 0 #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2