[Python-3000-checkins] r59465 - in python/branches/py3k: Lib/DocXMLRPCServer.py Lib/idlelib/FormatParagraph.py Lib/test/test_float.py Misc/ACKS Modules/signalmodule.c Objects/floatobject.c PCbuild/pythoncore.vcproj PCbuild8/pythoncore/pythoncore.vcproj PCbuild9/pythoncore.vcproj

christian.heimes python-3000-checkins at python.org
Tue Dec 11 02:06:41 CET 2007


Author: christian.heimes
Date: Tue Dec 11 02:06:40 2007
New Revision: 59465

Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/DocXMLRPCServer.py
   python/branches/py3k/Lib/idlelib/FormatParagraph.py
   python/branches/py3k/Lib/test/test_float.py
   python/branches/py3k/Misc/ACKS
   python/branches/py3k/Modules/signalmodule.c
   python/branches/py3k/Objects/floatobject.c
   python/branches/py3k/PCbuild/pythoncore.vcproj
   python/branches/py3k/PCbuild8/pythoncore/pythoncore.vcproj
   python/branches/py3k/PCbuild9/pythoncore.vcproj
Log:
Merged revisions 59450-59464 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r59455 | guido.van.rossum | 2007-12-10 21:42:53 +0100 (Mon, 10 Dec 2007) | 2 lines
  
  Remove a 2.2-ism.
........
  r59459 | christian.heimes | 2007-12-10 23:28:56 +0100 (Mon, 10 Dec 2007) | 4 lines
  
  Backport of r59456:59458 from py3k to trunk
  Issue #1580: New free format floating point representation based on "Floating-Point Printer Sample Code", by Robert G. Burger. For example repr(11./5) now returns '2.2' instead of '2.2000000000000002'.
  
  Thanks to noam for the patch! I had to modify doubledigits.c slightly to support X64 and IA64 machines on Windows. I also added the new file to the three project files.
........
  r59460 | guido.van.rossum | 2007-12-11 00:00:12 +0100 (Tue, 11 Dec 2007) | 4 lines
  
  Patch #1643738 by Ulisses Furquim -- make the is_tripped variable
  in signalmodule.c more robust.  Includes Martin von Loewis's suggestion
  to set is_tripped after .tripped.
........
  r59463 | kurt.kaiser | 2007-12-11 01:04:57 +0100 (Tue, 11 Dec 2007) | 2 lines
  
  format_paragraph_event wasn't returning 'break'
........
  r59464 | christian.heimes | 2007-12-11 01:54:34 +0100 (Tue, 11 Dec 2007) | 3 lines
  
  The new float repr causes too much trouble and pain. I'm disabling the feature until we have sorted out the issues on all machines. 64bit machines seem to have issues and Guido has reported even worse.
  Guido: It's pretty bad actually -- repr(1e5) comes out as '1.0'... Ditto for
  repr(1eN) for most N... Both in 2.6 and in 3.0...
........


Modified: python/branches/py3k/Lib/DocXMLRPCServer.py
==============================================================================
--- python/branches/py3k/Lib/DocXMLRPCServer.py	(original)
+++ python/branches/py3k/Lib/DocXMLRPCServer.py	Tue Dec 11 02:06:40 2007
@@ -123,8 +123,7 @@
         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(

Modified: python/branches/py3k/Lib/idlelib/FormatParagraph.py
==============================================================================
--- python/branches/py3k/Lib/idlelib/FormatParagraph.py	(original)
+++ python/branches/py3k/Lib/idlelib/FormatParagraph.py	Tue Dec 11 02:06:40 2007
@@ -75,6 +75,7 @@
         else:
             text.mark_set("insert", last)
         text.see("insert")
+        return "break"
 
 def find_paragraph(text, mark):
     lineno, col = map(int, mark.split("."))

Modified: python/branches/py3k/Lib/test/test_float.py
==============================================================================
--- python/branches/py3k/Lib/test/test_float.py	(original)
+++ python/branches/py3k/Lib/test/test_float.py	Tue Dec 11 02:06:40 2007
@@ -166,7 +166,8 @@
         UnknownFormatTestCase,
         IEEEFormatTestCase,
         FormatTestCase,
-        ReprTestCase)
+        #ReprTestCase
+        )
 
 if __name__ == '__main__':
     test_main()

Modified: python/branches/py3k/Misc/ACKS
==============================================================================
--- python/branches/py3k/Misc/ACKS	(original)
+++ python/branches/py3k/Misc/ACKS	Tue Dec 11 02:06:40 2007
@@ -225,6 +225,7 @@
 Gyro Funch
 Peter Funk
 Geoff Furnish
+Ulisses Furquim
 Lele Gaifax
 Santiago Gala
 Yitzchak Gale

Modified: python/branches/py3k/Modules/signalmodule.c
==============================================================================
--- python/branches/py3k/Modules/signalmodule.c	(original)
+++ python/branches/py3k/Modules/signalmodule.c	Tue Dec 11 02:06:40 2007
@@ -75,7 +75,8 @@
         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 @@
 	/* 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 @@
 
 	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 @@
 			Py_DECREF(result);
 		}
 	}
-	is_tripped = 0;
+
 	return 0;
 }
 
@@ -632,7 +653,7 @@
 void
 PyErr_SetInterrupt(void)
 {
-	is_tripped++;
+	is_tripped = 1;
 	Handlers[SIGINT].tripped = 1;
 	Py_AddPendingCall((int (*)(void *))PyErr_CheckSignals, NULL);
 }

Modified: python/branches/py3k/Objects/floatobject.c
==============================================================================
--- python/branches/py3k/Objects/floatobject.c	(original)
+++ python/branches/py3k/Objects/floatobject.c	Tue Dec 11 02:06:40 2007
@@ -281,6 +281,7 @@
 	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_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 @@
 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 @@
 
 	double_format = detected_double_format;
 	float_format = detected_float_format;
-	
+
+#ifdef Py_BROKEN_REPR	
 	/* Initialize floating point repr */
 	_PyFloat_DigitsInit();
+#endif
 }
 
 void

Modified: python/branches/py3k/PCbuild/pythoncore.vcproj
==============================================================================
--- python/branches/py3k/PCbuild/pythoncore.vcproj	(original)
+++ python/branches/py3k/PCbuild/pythoncore.vcproj	Tue Dec 11 02:06:40 2007
@@ -487,6 +487,9 @@
 		<File
 			RelativePath="..\Objects\dictobject.c">
 		</File>
+		<!--File
+			RelativePath="..\Objects\doubledigits.c">
+		</File-->
 		<File
 			RelativePath="..\Objects\doubledigits.c">
 		</File>

Modified: python/branches/py3k/PCbuild8/pythoncore/pythoncore.vcproj
==============================================================================
--- python/branches/py3k/PCbuild8/pythoncore/pythoncore.vcproj	(original)
+++ python/branches/py3k/PCbuild8/pythoncore/pythoncore.vcproj	Tue Dec 11 02:06:40 2007
@@ -827,6 +827,10 @@
 				RelativePath="..\..\Objects\dictobject.c"
 				>
 			</File>
+			<!--File
+				RelativePath="..\..\Objects\doubledigits.c"
+				>
+			</File-->
 			<File
 				RelativePath="..\..\Objects\doubledigits.c"
 				>

Modified: python/branches/py3k/PCbuild9/pythoncore.vcproj
==============================================================================
--- python/branches/py3k/PCbuild9/pythoncore.vcproj	(original)
+++ python/branches/py3k/PCbuild9/pythoncore.vcproj	Tue Dec 11 02:06:40 2007
@@ -1362,6 +1362,10 @@
 				RelativePath="..\Objects\dictobject.c"
 				>
 			</File>
+			<!--File
+				RelativePath="..\Objects\doubledigits.c"
+				>
+			</File-->
 			<File
 				RelativePath="..\Objects\doubledigits.c"
 				>


More information about the Python-3000-checkins mailing list