diff options
-rw-r--r-- | Lib/DocXMLRPCServer.py | 3 | ||||
-rw-r--r-- | Lib/idlelib/FormatParagraph.py | 1 | ||||
-rw-r--r-- | Lib/test/test_float.py | 3 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Modules/signalmodule.c | 31 | ||||
-rw-r--r-- | Objects/floatobject.c | 13 | ||||
-rw-r--r-- | PCbuild/pythoncore.vcproj | 3 | ||||
-rw-r--r-- | PCbuild8/pythoncore/pythoncore.vcproj | 4 | ||||
-rw-r--r-- | PCbuild9/pythoncore.vcproj | 4 |
9 files changed, 54 insertions, 9 deletions
diff --git a/Lib/DocXMLRPCServer.py b/Lib/DocXMLRPCServer.py index 86c7bfb..504b669 100644 --- a/Lib/DocXMLRPCServer.py +++ b/Lib/DocXMLRPCServer.py @@ -123,8 +123,7 @@ class ServerHTMLDoc(pydoc.HTMLDoc): result = result + '<p>%s</p>\n' % doc contents = [] - method_items = list(methods.items()) - method_items.sort() + method_items = sorted(methods.items()) for key, value in method_items: contents.append(self.docroutine(value, key, funcs=fdict)) result = result + self.bigsection( diff --git a/Lib/idlelib/FormatParagraph.py b/Lib/idlelib/FormatParagraph.py index 9b4b3cb..02f96d4 100644 --- a/Lib/idlelib/FormatParagraph.py +++ b/Lib/idlelib/FormatParagraph.py @@ -75,6 +75,7 @@ class FormatParagraph: else: text.mark_set("insert", last) text.see("insert") + return "break" def find_paragraph(text, mark): lineno, col = map(int, mark.split(".")) diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index 2ba6dbc..922de7a 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -166,7 +166,8 @@ def test_main(): UnknownFormatTestCase, IEEEFormatTestCase, FormatTestCase, - ReprTestCase) + #ReprTestCase + ) if __name__ == '__main__': test_main() @@ -225,6 +225,7 @@ Tadayoshi Funaba Gyro Funch Peter Funk Geoff Furnish +Ulisses Furquim Lele Gaifax Santiago Gala Yitzchak Gale diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 5f38b9b..76c8198 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -75,7 +75,8 @@ static struct { PyObject *func; } Handlers[NSIG]; -static int is_tripped = 0; /* Speed up sigcheck() when none tripped */ +/* Speed up sigcheck() when none tripped */ +static volatile sig_atomic_t is_tripped = 0; static PyObject *DefaultHandler; static PyObject *IgnoreHandler; @@ -122,8 +123,10 @@ signal_handler(int sig_num) /* See NOTES section above */ if (getpid() == main_pid) { #endif - is_tripped++; Handlers[sig_num].tripped = 1; + /* Set is_tripped after setting .tripped, as it gets + cleared in PyErr_CheckSignals() before .tripped. */ + is_tripped = 1; Py_AddPendingCall(checksignals_witharg, NULL); #ifdef WITH_THREAD } @@ -597,13 +600,31 @@ PyErr_CheckSignals(void) if (!is_tripped) return 0; + #ifdef WITH_THREAD if (PyThread_get_thread_ident() != main_thread) return 0; #endif + + /* + * The is_stripped variable is meant to speed up the calls to + * PyErr_CheckSignals (both directly or via pending calls) when no + * signal has arrived. This variable is set to 1 when a signal arrives + * and it is set to 0 here, when we know some signals arrived. This way + * we can run the registered handlers with no signals blocked. + * + * NOTE: with this approach we can have a situation where is_tripped is + * 1 but we have no more signals to handle (Handlers[i].tripped + * is 0 for every signal i). This won't do us any harm (except + * we're gonna spent some cycles for nothing). This happens when + * we receive a signal i after we zero is_tripped and before we + * check Handlers[i].tripped. + */ + is_tripped = 0; + if (!(f = (PyObject *)PyEval_GetFrame())) f = Py_None; - + for (i = 1; i < NSIG; i++) { if (Handlers[i].tripped) { PyObject *result = NULL; @@ -621,7 +642,7 @@ PyErr_CheckSignals(void) Py_DECREF(result); } } - is_tripped = 0; + return 0; } @@ -632,7 +653,7 @@ PyErr_CheckSignals(void) void PyErr_SetInterrupt(void) { - is_tripped++; + is_tripped = 1; Handlers[SIGINT].tripped = 1; Py_AddPendingCall((int (*)(void *))PyErr_CheckSignals, NULL); } diff --git a/Objects/floatobject.c b/Objects/floatobject.c index b17f7be..48d29d7 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -281,6 +281,7 @@ format_float(char *buf, size_t buflen, PyFloatObject *v, int precision) format_double(buf, buflen, PyFloat_AS_DOUBLE(v), precision); } +#ifdef Py_BROKEN_REPR /* The following function is based on Tcl_PrintDouble, * from tclUtil.c. */ @@ -382,6 +383,8 @@ format_float_repr(char *buf, PyFloatObject *v) format_double_repr(buf, PyFloat_AS_DOUBLE(v)); } +#endif /* Py_BROKEN_REPR */ + /* Macro and helper that convert PyObject obj to a C double and store the value in dbl. If conversion to double raises an exception, obj is set to NULL, and the function invoking this macro returns NULL. If @@ -434,8 +437,14 @@ convert_to_double(PyObject **v, double *dbl) static PyObject * float_repr(PyFloatObject *v) { +#ifdef Py_BROKEN_REPR char buf[30]; format_float_repr(buf, v); +#else + char buf[100]; + format_float(buf, sizeof(buf), v, PREC_REPR); +#endif + return PyUnicode_FromString(buf); } @@ -1327,9 +1336,11 @@ _PyFloat_Init(void) double_format = detected_double_format; float_format = detected_float_format; - + +#ifdef Py_BROKEN_REPR /* Initialize floating point repr */ _PyFloat_DigitsInit(); +#endif } void diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj index 326eacc..2ac8e25 100644 --- a/PCbuild/pythoncore.vcproj +++ b/PCbuild/pythoncore.vcproj @@ -487,6 +487,9 @@ <File RelativePath="..\Objects\dictobject.c"> </File> + <!--File + RelativePath="..\Objects\doubledigits.c"> + </File--> <File RelativePath="..\Objects\doubledigits.c"> </File> diff --git a/PCbuild8/pythoncore/pythoncore.vcproj b/PCbuild8/pythoncore/pythoncore.vcproj index 9a848d7..1a78022 100644 --- a/PCbuild8/pythoncore/pythoncore.vcproj +++ b/PCbuild8/pythoncore/pythoncore.vcproj @@ -827,6 +827,10 @@ RelativePath="..\..\Objects\dictobject.c"
>
</File>
+ <!--File
+ RelativePath="..\..\Objects\doubledigits.c"
+ >
+ </File-->
<File
RelativePath="..\..\Objects\doubledigits.c"
>
diff --git a/PCbuild9/pythoncore.vcproj b/PCbuild9/pythoncore.vcproj index 646cb4f..42eaa2e 100644 --- a/PCbuild9/pythoncore.vcproj +++ b/PCbuild9/pythoncore.vcproj @@ -1362,6 +1362,10 @@ RelativePath="..\Objects\dictobject.c" > </File> + <!--File + RelativePath="..\Objects\doubledigits.c" + > + </File--> <File RelativePath="..\Objects\doubledigits.c" > |