[Python-checkins] cpython: Fix Windows build breakage from checkins on Issues #20148 and #20168.

larry.hastings python-checkins at python.org
Sun May 3 23:49:49 CEST 2015


https://hg.python.org/cpython/rev/7a76c462c7f6
changeset:   95876:7a76c462c7f6
user:        Larry Hastings <larry at hastings.org>
date:        Sun May 03 14:49:19 2015 -0700
summary:
  Fix Windows build breakage from checkins on Issues #20148 and #20168.

files:
  Modules/_sre.c     |  499 ++++++++++++++++----------------
  Modules/_tkinter.c |   71 ++--
  2 files changed, 282 insertions(+), 288 deletions(-)


diff --git a/Modules/_sre.c b/Modules/_sre.c
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -269,6 +269,10 @@
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=b0230ec19a0deac8]*/
 
+static PyTypeObject Pattern_Type;
+static PyTypeObject Match_Type;
+static PyTypeObject Scanner_Type;
+
 /*[clinic input]
 _sre.getcodesize -> int
 [clinic start generated code]*/
@@ -1426,8 +1430,6 @@
 
 PyDoc_STRVAR(pattern_doc, "Compiled regular expression objects");
 
-static PyMethodDef pattern_methods[];
-
 /* PatternObject's 'groupindex' method. */
 static PyObject *
 pattern_groupindex(PatternObject *self)
@@ -1435,52 +1437,6 @@
     return PyDictProxy_New(self->groupindex);
 }
 
-static PyGetSetDef pattern_getset[] = {
-    {"groupindex", (getter)pattern_groupindex, (setter)NULL,
-      "A dictionary mapping group names to group numbers."},
-    {NULL}  /* Sentinel */
-};
-
-#define PAT_OFF(x) offsetof(PatternObject, x)
-static PyMemberDef pattern_members[] = {
-    {"pattern",    T_OBJECT,    PAT_OFF(pattern),       READONLY},
-    {"flags",      T_INT,       PAT_OFF(flags),         READONLY},
-    {"groups",     T_PYSSIZET,  PAT_OFF(groups),        READONLY},
-    {NULL}  /* Sentinel */
-};
-
-static PyTypeObject Pattern_Type = {
-    PyVarObject_HEAD_INIT(NULL, 0)
-    "_" SRE_MODULE ".SRE_Pattern",
-    sizeof(PatternObject), sizeof(SRE_CODE),
-    (destructor)pattern_dealloc,        /* tp_dealloc */
-    0,                                  /* tp_print */
-    0,                                  /* tp_getattr */
-    0,                                  /* tp_setattr */
-    0,                                  /* tp_reserved */
-    (reprfunc)pattern_repr,             /* tp_repr */
-    0,                                  /* tp_as_number */
-    0,                                  /* tp_as_sequence */
-    0,                                  /* tp_as_mapping */
-    0,                                  /* tp_hash */
-    0,                                  /* tp_call */
-    0,                                  /* tp_str */
-    0,                                  /* tp_getattro */
-    0,                                  /* tp_setattro */
-    0,                                  /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,                 /* tp_flags */
-    pattern_doc,                        /* tp_doc */
-    0,                                  /* tp_traverse */
-    0,                                  /* tp_clear */
-    0,                                  /* tp_richcompare */
-    offsetof(PatternObject, weakreflist),       /* tp_weaklistoffset */
-    0,                                  /* tp_iter */
-    0,                                  /* tp_iternext */
-    pattern_methods,                    /* tp_methods */
-    pattern_members,                    /* tp_members */
-    pattern_getset,                     /* tp_getset */
-};
-
 static int _validate(PatternObject *self); /* Forward */
 
 /*[clinic input]
@@ -2469,8 +2425,6 @@
     Return subgroup(s) of the match by indices or names.\n\
     For 0 returns the entire match.");
 
-static PyMethodDef match_methods[];
-
 static PyObject *
 match_lastindex_get(MatchObject *self)
 {
@@ -2521,6 +2475,246 @@
 }
 
 
+static PyObject*
+pattern_new_match(PatternObject* pattern, SRE_STATE* state, Py_ssize_t status)
+{
+    /* create match object (from state object) */
+
+    MatchObject* match;
+    Py_ssize_t i, j;
+    char* base;
+    int n;
+
+    if (status > 0) {
+
+        /* create match object (with room for extra group marks) */
+        /* coverity[ampersand_in_size] */
+        match = PyObject_NEW_VAR(MatchObject, &Match_Type,
+                                 2*(pattern->groups+1));
+        if (!match)
+            return NULL;
+
+        Py_INCREF(pattern);
+        match->pattern = pattern;
+
+        Py_INCREF(state->string);
+        match->string = state->string;
+
+        match->regs = NULL;
+        match->groups = pattern->groups+1;
+
+        /* fill in group slices */
+
+        base = (char*) state->beginning;
+        n = state->charsize;
+
+        match->mark[0] = ((char*) state->start - base) / n;
+        match->mark[1] = ((char*) state->ptr - base) / n;
+
+        for (i = j = 0; i < pattern->groups; i++, j+=2)
+            if (j+1 <= state->lastmark && state->mark[j] && state->mark[j+1]) {
+                match->mark[j+2] = ((char*) state->mark[j] - base) / n;
+                match->mark[j+3] = ((char*) state->mark[j+1] - base) / n;
+            } else
+                match->mark[j+2] = match->mark[j+3] = -1; /* undefined */
+
+        match->pos = state->pos;
+        match->endpos = state->endpos;
+
+        match->lastindex = state->lastindex;
+
+        return (PyObject*) match;
+
+    } else if (status == 0) {
+
+        /* no match */
+        Py_INCREF(Py_None);
+        return Py_None;
+
+    }
+
+    /* internal error */
+    pattern_error(status);
+    return NULL;
+}
+
+
+/* -------------------------------------------------------------------- */
+/* scanner methods (experimental) */
+
+static void
+scanner_dealloc(ScannerObject* self)
+{
+    state_fini(&self->state);
+    Py_XDECREF(self->pattern);
+    PyObject_DEL(self);
+}
+
+/*[clinic input]
+_sre.SRE_Scanner.match
+
+[clinic start generated code]*/
+
+static PyObject *
+_sre_SRE_Scanner_match_impl(ScannerObject *self)
+/*[clinic end generated code: output=936b30c63d4b81eb input=881a0154f8c13d9a]*/
+{
+    SRE_STATE* state = &self->state;
+    PyObject* match;
+    Py_ssize_t status;
+
+    state_reset(state);
+
+    state->ptr = state->start;
+
+    status = sre_match(state, PatternObject_GetCode(self->pattern), 0);
+    if (PyErr_Occurred())
+        return NULL;
+
+    match = pattern_new_match((PatternObject*) self->pattern,
+                               state, status);
+
+    if (status == 0 || state->ptr == state->start)
+        state->start = (void*) ((char*) state->ptr + state->charsize);
+    else
+        state->start = state->ptr;
+
+    return match;
+}
+
+
+/*[clinic input]
+_sre.SRE_Scanner.search
+
+[clinic start generated code]*/
+
+static PyObject *
+_sre_SRE_Scanner_search_impl(ScannerObject *self)
+/*[clinic end generated code: output=7dc211986088f025 input=161223ee92ef9270]*/
+{
+    SRE_STATE* state = &self->state;
+    PyObject* match;
+    Py_ssize_t status;
+
+    state_reset(state);
+
+    state->ptr = state->start;
+
+    status = sre_search(state, PatternObject_GetCode(self->pattern));
+    if (PyErr_Occurred())
+        return NULL;
+
+    match = pattern_new_match((PatternObject*) self->pattern,
+                               state, status);
+
+    if (status == 0 || state->ptr == state->start)
+        state->start = (void*) ((char*) state->ptr + state->charsize);
+    else
+        state->start = state->ptr;
+
+    return match;
+}
+
+static PyObject *
+pattern_scanner(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos)
+{
+    ScannerObject* scanner;
+
+    /* create scanner object */
+    scanner = PyObject_NEW(ScannerObject, &Scanner_Type);
+    if (!scanner)
+        return NULL;
+    scanner->pattern = NULL;
+
+    /* create search state object */
+    if (!state_init(&scanner->state, self, string, pos, endpos)) {
+        Py_DECREF(scanner);
+        return NULL;
+    }
+
+    Py_INCREF(self);
+    scanner->pattern = (PyObject*) self;
+
+    return (PyObject*) scanner;
+}
+
+#include "clinic/_sre.c.h"
+
+static PyMethodDef pattern_methods[] = {
+    _SRE_SRE_PATTERN_MATCH_METHODDEF
+    _SRE_SRE_PATTERN_FULLMATCH_METHODDEF
+    _SRE_SRE_PATTERN_SEARCH_METHODDEF
+    _SRE_SRE_PATTERN_SUB_METHODDEF
+    _SRE_SRE_PATTERN_SUBN_METHODDEF
+    _SRE_SRE_PATTERN_FINDALL_METHODDEF
+    _SRE_SRE_PATTERN_SPLIT_METHODDEF
+    _SRE_SRE_PATTERN_FINDITER_METHODDEF
+    _SRE_SRE_PATTERN_SCANNER_METHODDEF
+    _SRE_SRE_PATTERN___COPY___METHODDEF
+    _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF
+    {NULL, NULL}
+};
+
+static PyGetSetDef pattern_getset[] = {
+    {"groupindex", (getter)pattern_groupindex, (setter)NULL,
+      "A dictionary mapping group names to group numbers."},
+    {NULL}  /* Sentinel */
+};
+
+#define PAT_OFF(x) offsetof(PatternObject, x)
+static PyMemberDef pattern_members[] = {
+    {"pattern",    T_OBJECT,    PAT_OFF(pattern),       READONLY},
+    {"flags",      T_INT,       PAT_OFF(flags),         READONLY},
+    {"groups",     T_PYSSIZET,  PAT_OFF(groups),        READONLY},
+    {NULL}  /* Sentinel */
+};
+
+static PyTypeObject Pattern_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "_" SRE_MODULE ".SRE_Pattern",
+    sizeof(PatternObject), sizeof(SRE_CODE),
+    (destructor)pattern_dealloc,        /* tp_dealloc */
+    0,                                  /* tp_print */
+    0,                                  /* tp_getattr */
+    0,                                  /* tp_setattr */
+    0,                                  /* tp_reserved */
+    (reprfunc)pattern_repr,             /* tp_repr */
+    0,                                  /* tp_as_number */
+    0,                                  /* tp_as_sequence */
+    0,                                  /* tp_as_mapping */
+    0,                                  /* tp_hash */
+    0,                                  /* tp_call */
+    0,                                  /* tp_str */
+    0,                                  /* tp_getattro */
+    0,                                  /* tp_setattro */
+    0,                                  /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                 /* tp_flags */
+    pattern_doc,                        /* tp_doc */
+    0,                                  /* tp_traverse */
+    0,                                  /* tp_clear */
+    0,                                  /* tp_richcompare */
+    offsetof(PatternObject, weakreflist),       /* tp_weaklistoffset */
+    0,                                  /* tp_iter */
+    0,                                  /* tp_iternext */
+    pattern_methods,                    /* tp_methods */
+    pattern_members,                    /* tp_members */
+    pattern_getset,                     /* tp_getset */
+};
+
+
+static PyMethodDef match_methods[] = {
+    {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc},
+    _SRE_SRE_MATCH_START_METHODDEF
+    _SRE_SRE_MATCH_END_METHODDEF
+    _SRE_SRE_MATCH_SPAN_METHODDEF
+    _SRE_SRE_MATCH_GROUPS_METHODDEF
+    _SRE_SRE_MATCH_GROUPDICT_METHODDEF
+    _SRE_SRE_MATCH_EXPAND_METHODDEF
+    _SRE_SRE_MATCH___COPY___METHODDEF
+    _SRE_SRE_MATCH___DEEPCOPY___METHODDEF
+    {NULL, NULL}
+};
+
 static PyGetSetDef match_getset[] = {
     {"lastindex", (getter)match_lastindex_get, (setter)NULL},
     {"lastgroup", (getter)match_lastgroup_get, (setter)NULL},
@@ -2572,147 +2766,11 @@
     match_getset,               /* tp_getset */
 };
 
-static PyObject*
-pattern_new_match(PatternObject* pattern, SRE_STATE* state, Py_ssize_t status)
-{
-    /* create match object (from state object) */
-
-    MatchObject* match;
-    Py_ssize_t i, j;
-    char* base;
-    int n;
-
-    if (status > 0) {
-
-        /* create match object (with room for extra group marks) */
-        /* coverity[ampersand_in_size] */
-        match = PyObject_NEW_VAR(MatchObject, &Match_Type,
-                                 2*(pattern->groups+1));
-        if (!match)
-            return NULL;
-
-        Py_INCREF(pattern);
-        match->pattern = pattern;
-
-        Py_INCREF(state->string);
-        match->string = state->string;
-
-        match->regs = NULL;
-        match->groups = pattern->groups+1;
-
-        /* fill in group slices */
-
-        base = (char*) state->beginning;
-        n = state->charsize;
-
-        match->mark[0] = ((char*) state->start - base) / n;
-        match->mark[1] = ((char*) state->ptr - base) / n;
-
-        for (i = j = 0; i < pattern->groups; i++, j+=2)
-            if (j+1 <= state->lastmark && state->mark[j] && state->mark[j+1]) {
-                match->mark[j+2] = ((char*) state->mark[j] - base) / n;
-                match->mark[j+3] = ((char*) state->mark[j+1] - base) / n;
-            } else
-                match->mark[j+2] = match->mark[j+3] = -1; /* undefined */
-
-        match->pos = state->pos;
-        match->endpos = state->endpos;
-
-        match->lastindex = state->lastindex;
-
-        return (PyObject*) match;
-
-    } else if (status == 0) {
-
-        /* no match */
-        Py_INCREF(Py_None);
-        return Py_None;
-
-    }
-
-    /* internal error */
-    pattern_error(status);
-    return NULL;
-}
-
-
-/* -------------------------------------------------------------------- */
-/* scanner methods (experimental) */
-
-static void
-scanner_dealloc(ScannerObject* self)
-{
-    state_fini(&self->state);
-    Py_XDECREF(self->pattern);
-    PyObject_DEL(self);
-}
-
-/*[clinic input]
-_sre.SRE_Scanner.match
-
-[clinic start generated code]*/
-
-static PyObject *
-_sre_SRE_Scanner_match_impl(ScannerObject *self)
-/*[clinic end generated code: output=936b30c63d4b81eb input=881a0154f8c13d9a]*/
-{
-    SRE_STATE* state = &self->state;
-    PyObject* match;
-    Py_ssize_t status;
-
-    state_reset(state);
-
-    state->ptr = state->start;
-
-    status = sre_match(state, PatternObject_GetCode(self->pattern), 0);
-    if (PyErr_Occurred())
-        return NULL;
-
-    match = pattern_new_match((PatternObject*) self->pattern,
-                               state, status);
-
-    if (status == 0 || state->ptr == state->start)
-        state->start = (void*) ((char*) state->ptr + state->charsize);
-    else
-        state->start = state->ptr;
-
-    return match;
-}
-
-
-/*[clinic input]
-_sre.SRE_Scanner.search
-
-[clinic start generated code]*/
-
-static PyObject *
-_sre_SRE_Scanner_search_impl(ScannerObject *self)
-/*[clinic end generated code: output=7dc211986088f025 input=161223ee92ef9270]*/
-{
-    SRE_STATE* state = &self->state;
-    PyObject* match;
-    Py_ssize_t status;
-
-    state_reset(state);
-
-    state->ptr = state->start;
-
-    status = sre_search(state, PatternObject_GetCode(self->pattern));
-    if (PyErr_Occurred())
-        return NULL;
-
-    match = pattern_new_match((PatternObject*) self->pattern,
-                               state, status);
-
-    if (status == 0 || state->ptr == state->start)
-        state->start = (void*) ((char*) state->ptr + state->charsize);
-    else
-        state->start = state->ptr;
-
-    return match;
-}
-
-static PyMethodDef scanner_methods[];
+static PyMethodDef scanner_methods[] = {
+    _SRE_SRE_SCANNER_MATCH_METHODDEF
+    _SRE_SRE_SCANNER_SEARCH_METHODDEF
+    {NULL, NULL}
+};
 
 #define SCAN_OFF(x) offsetof(ScannerObject, x)
 static PyMemberDef scanner_members[] = {
@@ -2752,65 +2810,6 @@
     0,                          /* tp_getset */
 };
 
-static PyObject *
-pattern_scanner(PatternObject *self, PyObject *string, Py_ssize_t pos, Py_ssize_t endpos)
-{
-    ScannerObject* scanner;
-
-    /* create scanner object */
-    scanner = PyObject_NEW(ScannerObject, &Scanner_Type);
-    if (!scanner)
-        return NULL;
-    scanner->pattern = NULL;
-
-    /* create search state object */
-    if (!state_init(&scanner->state, self, string, pos, endpos)) {
-        Py_DECREF(scanner);
-        return NULL;
-    }
-
-    Py_INCREF(self);
-    scanner->pattern = (PyObject*) self;
-
-    return (PyObject*) scanner;
-}
-
-#include "clinic/_sre.c.h"
-
-static PyMethodDef pattern_methods[] = {
-    _SRE_SRE_PATTERN_MATCH_METHODDEF
-    _SRE_SRE_PATTERN_FULLMATCH_METHODDEF
-    _SRE_SRE_PATTERN_SEARCH_METHODDEF
-    _SRE_SRE_PATTERN_SUB_METHODDEF
-    _SRE_SRE_PATTERN_SUBN_METHODDEF
-    _SRE_SRE_PATTERN_FINDALL_METHODDEF
-    _SRE_SRE_PATTERN_SPLIT_METHODDEF
-    _SRE_SRE_PATTERN_FINDITER_METHODDEF
-    _SRE_SRE_PATTERN_SCANNER_METHODDEF
-    _SRE_SRE_PATTERN___COPY___METHODDEF
-    _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF
-    {NULL, NULL}
-};
-
-static PyMethodDef match_methods[] = {
-    {"group", (PyCFunction) match_group, METH_VARARGS, match_group_doc},
-    _SRE_SRE_MATCH_START_METHODDEF
-    _SRE_SRE_MATCH_END_METHODDEF
-    _SRE_SRE_MATCH_SPAN_METHODDEF
-    _SRE_SRE_MATCH_GROUPS_METHODDEF
-    _SRE_SRE_MATCH_GROUPDICT_METHODDEF
-    _SRE_SRE_MATCH_EXPAND_METHODDEF
-    _SRE_SRE_MATCH___COPY___METHODDEF
-    _SRE_SRE_MATCH___DEEPCOPY___METHODDEF
-    {NULL, NULL}
-};
-
-static PyMethodDef scanner_methods[] = {
-    _SRE_SRE_SCANNER_MATCH_METHODDEF
-    _SRE_SRE_SCANNER_SEARCH_METHODDEF
-    {NULL, NULL}
-};
-
 static PyMethodDef _functions[] = {
     _SRE_COMPILE_METHODDEF
     _SRE_GETCODESIZE_METHODDEF
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -2682,8 +2682,6 @@
     Py_RETURN_NONE;
 }
 
-static PyMethodDef Tktt_methods[];
-
 static TkttObject *
 Tktt_New(PyObject *func)
 {
@@ -2725,22 +2723,6 @@
                                 v->func == NULL ? ", handler deleted" : "");
 }
 
-static PyType_Slot Tktt_Type_slots[] = {
-    {Py_tp_dealloc, Tktt_Dealloc},
-    {Py_tp_repr, Tktt_Repr},
-    {Py_tp_methods, Tktt_methods},
-    {0, 0}
-};
-
-static PyType_Spec Tktt_Type_spec = {
-    "_tkinter.tktimertoken",
-    sizeof(TkttObject),
-    0,
-    Py_TPFLAGS_DEFAULT,
-    Tktt_Type_slots,
-};
-
-
 /** Timer Handler **/
 
 static void
@@ -3001,11 +2983,6 @@
 }
 
 
-/**** Tkapp Method List ****/
-
-static PyMethodDef Tkapp_methods[];
-
-
 /**** Tkapp Type Methods ****/
 
 static void
@@ -3021,21 +2998,6 @@
     DisableEventHook();
 }
 
-static PyType_Slot Tkapp_Type_slots[] = {
-    {Py_tp_dealloc, Tkapp_Dealloc},
-    {Py_tp_methods, Tkapp_methods},
-    {0, 0}
-};
-
-
-static PyType_Spec Tkapp_Type_spec = {
-    "_tkinter.tkapp",
-    sizeof(TkappObject),
-    0,
-    Py_TPFLAGS_DEFAULT,
-    Tkapp_Type_slots,
-};
-
 
 
 /**** Tkinter Module ****/
@@ -3218,6 +3180,24 @@
     {NULL, NULL}
 };
 
+static PyType_Slot Tktt_Type_slots[] = {
+    {Py_tp_dealloc, Tktt_Dealloc},
+    {Py_tp_repr, Tktt_Repr},
+    {Py_tp_methods, Tktt_methods},
+    {0, 0}
+};
+
+static PyType_Spec Tktt_Type_spec = {
+    "_tkinter.tktimertoken",
+    sizeof(TkttObject),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    Tktt_Type_slots,
+};
+
+
+/**** Tkapp Method List ****/
+
 static PyMethodDef Tkapp_methods[] =
 {
     _TKINTER_TKAPP_WILLDISPATCH_METHODDEF
@@ -3255,6 +3235,21 @@
     {NULL,                     NULL}
 };
 
+static PyType_Slot Tkapp_Type_slots[] = {
+    {Py_tp_dealloc, Tkapp_Dealloc},
+    {Py_tp_methods, Tkapp_methods},
+    {0, 0}
+};
+
+
+static PyType_Spec Tkapp_Type_spec = {
+    "_tkinter.tkapp",
+    sizeof(TkappObject),
+    0,
+    Py_TPFLAGS_DEFAULT,
+    Tkapp_Type_slots,
+};
+
 static PyMethodDef moduleMethods[] =
 {
     _TKINTER__FLATTEN_METHODDEF

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list