summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-12-06 06:23:26 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-12-06 06:23:26 (GMT)
commit3caca2326e04ea3c0d1f8c6a588e646d8201af38 (patch)
tree8a1763afce3137836cd61eecf3b049b354f37462 /Lib
parente50959a58ef4f365295f0393cb980de890c0024a (diff)
downloadcpython-3caca2326e04ea3c0d1f8c6a588e646d8201af38.zip
cpython-3caca2326e04ea3c0d1f8c6a588e646d8201af38.tar.gz
cpython-3caca2326e04ea3c0d1f8c6a588e646d8201af38.tar.bz2
SF bug #488514: -Qnew needs work
Big Hammer to implement -Qnew as PEP 238 says it should work (a global option affecting all instances of "/"). pydebug.h, main.c, pythonrun.c: define a private _Py_QnewFlag flag, true iff -Qnew is passed on the command line. This should go away (as the comments say) when true division becomes The Rule. This is deliberately not exposed to runtime inspection or modification: it's a one-way one-shot switch to pretend you're using Python 3. ceval.c: when _Py_QnewFlag is set, treat BINARY_DIVIDE as BINARY_TRUE_DIVIDE. test_{descr, generators, zipfile}.py: fiddle so these pass under -Qnew too. This was just a matter of s!/!//! in test_generators and test_zipfile. test_descr was trickier, as testbinop() is passed assumptions that "/" is the same as calling a "__div__" method; put a temporary hack there to call "__truediv__" instead when the method name is "__div__" and 1/2 evaluates to 0.5. Three standard tests still fail under -Qnew (on Windows; somebody please try the Linux tests with -Qnew too! Linux runs a whole bunch of tests Windows doesn't): test_augassign test_class test_coercion I can't stay awake longer to stare at this (be my guest). Offhand cures weren't obvious, nor was it even obvious that cures are possible without major hackery. Question: when -Qnew is in effect, should calls to __div__ magically change into calls to __truediv__? See "major hackery" at tail end of last paragraph <wink>.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_descr.py5
-rw-r--r--Lib/test/test_generators.py12
-rw-r--r--Lib/zipfile.py4
3 files changed, 13 insertions, 8 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 481ca0f..a0958df 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -23,6 +23,11 @@ def testunop(a, res, expr="len(a)", meth="__len__"):
def testbinop(a, b, res, expr="a+b", meth="__add__"):
if verbose: print "checking", expr
dict = {'a': a, 'b': b}
+
+ # XXX Hack so this passes before 2.3 when -Qnew is specified.
+ if meth == "__div__" and 1/2 == 0.5:
+ meth = "__truediv__"
+
vereq(eval(expr, dict), res)
t = type(a)
m = getattr(t, meth)
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py
index 118b1d9..2c319e5 100644
--- a/Lib/test/test_generators.py
+++ b/Lib/test/test_generators.py
@@ -182,7 +182,7 @@ Specification: Return
Specification: Generators and Exception Propagation
>>> def f():
- ... return 1/0
+ ... return 1//0
>>> def g():
... yield f() # the zero division exception propagates
... yield 42 # and we'll never get here
@@ -206,7 +206,7 @@ Specification: Try/Except/Finally
... yield 1
... try:
... yield 2
- ... 1/0
+ ... 1//0
... yield 3 # never get here
... except ZeroDivisionError:
... yield 4
@@ -253,7 +253,7 @@ Guido's binary tree example.
... n = len(list)
... if n == 0:
... return []
- ... i = n / 2
+ ... i = n // 2
... return Tree(list[i], tree(list[:i]), tree(list[i+1:]))
>>> # Show it off: create a tree.
@@ -691,7 +691,7 @@ SyntaxError: 'yield' not allowed in a 'try' block with a 'finally' clause (<stri
>>> def f():
... try:
... try:
-... 1/0
+... 1//0
... except ZeroDivisionError:
... yield 666 # bad because *outer* try has finally
... except:
@@ -708,7 +708,7 @@ But this is fine:
... try:
... try:
... yield 12
-... 1/0
+... 1//0
... except ZeroDivisionError:
... yield 666
... except:
@@ -751,7 +751,7 @@ SyntaxError: invalid syntax
... pass
... elif 0:
... try:
-... 1/0
+... 1//0
... except SyntaxError:
... pass
... else:
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 4b59ac6..0efcad3 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -117,7 +117,7 @@ class ZipInfo:
"""Return the per-file header as a string."""
dt = self.date_time
dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
- dostime = dt[3] << 11 | dt[4] << 5 | dt[5] / 2
+ dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
if self.flag_bits & 0x08:
# Set these to zero because we write them after the file data
CRC = compress_size = file_size = 0
@@ -468,7 +468,7 @@ class ZipFile:
count = count + 1
dt = zinfo.date_time
dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
- dostime = dt[3] << 11 | dt[4] << 5 | dt[5] / 2
+ dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
centdir = struct.pack(structCentralDir,
stringCentralDir, zinfo.create_version,
zinfo.create_system, zinfo.extract_version, zinfo.reserved,