Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
330fecde
Commit
330fecde
authored
Jun 11, 2011
by
Benjamin Peterson
Browse files
Options
Browse Files
Download
Plain Diff
merge 2.7.2 release branch
parents
19e62d21
3d4acd16
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
470 additions
and
154 deletions
+470
-154
Doc/c-api/intro.rst
Doc/c-api/intro.rst
+2
-2
Doc/distutils/apiref.rst
Doc/distutils/apiref.rst
+1
-1
Doc/distutils/introduction.rst
Doc/distutils/introduction.rst
+8
-2
Doc/documenting/building.rst
Doc/documenting/building.rst
+1
-0
Doc/documenting/markup.rst
Doc/documenting/markup.rst
+6
-5
Doc/install/index.rst
Doc/install/index.rst
+9
-6
Doc/library/collections.rst
Doc/library/collections.rst
+3
-1
Doc/library/functions.rst
Doc/library/functions.rst
+38
-29
Doc/license.rst
Doc/license.rst
+2
-2
Doc/reference/datamodel.rst
Doc/reference/datamodel.rst
+1
-1
Doc/using/cmdline.rst
Doc/using/cmdline.rst
+1
-1
Lib/collections.py
Lib/collections.py
+1
-0
Lib/decimal.py
Lib/decimal.py
+81
-38
Lib/ntpath.py
Lib/ntpath.py
+10
-0
Lib/subprocess.py
Lib/subprocess.py
+4
-1
Lib/test/cjkencodings/iso2022_jp-utf8.txt
Lib/test/cjkencodings/iso2022_jp-utf8.txt
+7
-0
Lib/test/cjkencodings/iso2022_jp.txt
Lib/test/cjkencodings/iso2022_jp.txt
+7
-0
Lib/test/cjkencodings/iso2022_kr-utf8.txt
Lib/test/cjkencodings/iso2022_kr-utf8.txt
+7
-0
Lib/test/cjkencodings/iso2022_kr.txt
Lib/test/cjkencodings/iso2022_kr.txt
+7
-0
Lib/test/decimaltestdata/extra.decTest
Lib/test/decimaltestdata/extra.decTest
+13
-0
Lib/test/test_codecencodings_iso2022.py
Lib/test/test_codecencodings_iso2022.py
+46
-0
Lib/test/test_collections.py
Lib/test/test_collections.py
+1
-1
Lib/test/test_multibytecodec_support.py
Lib/test/test_multibytecodec_support.py
+38
-2
Lib/test/test_subprocess.py
Lib/test/test_subprocess.py
+10
-0
Lib/test/test_support.py
Lib/test/test_support.py
+3
-0
Lib/test/test_zipfile.py
Lib/test/test_zipfile.py
+18
-0
Lib/zipfile.py
Lib/zipfile.py
+8
-10
Misc/ACKS
Misc/ACKS
+1
-0
Misc/NEWS
Misc/NEWS
+42
-0
Modules/cjkcodecs/_codecs_hk.c
Modules/cjkcodecs/_codecs_hk.c
+47
-46
Modules/cjkcodecs/_codecs_jp.c
Modules/cjkcodecs/_codecs_jp.c
+5
-5
Modules/posixmodule.c
Modules/posixmodule.c
+39
-0
Modules/threadmodule.c
Modules/threadmodule.c
+1
-1
Parser/myreadline.c
Parser/myreadline.c
+1
-0
Python/sysmodule.c
Python/sysmodule.c
+1
-0
No files found.
Doc/c-api/intro.rst
View file @
330fecde
...
...
@@ -594,8 +594,8 @@ frequently-used builds will be described in the remainder of this section.
Compiling the interpreter with the :cmacro:`Py_DEBUG` macro defined produces
what is generally meant by "a debug build" of Python. :cmacro:`Py_DEBUG` is
enabled in the Unix build by adding
:option:`--with-pydebug
` to the
:file:`configure` command. It is also implied by the presence of the
enabled in the Unix build by adding
``--with-pydebug`
` to the
:file:`
./
configure` command. It is also implied by the presence of the
not-Python-specific :cmacro:`_DEBUG` macro. When :cmacro:`Py_DEBUG` is enabled
in the Unix build, compiler optimization is disabled.
...
...
Doc/distutils/apiref.rst
View file @
330fecde
...
...
@@ -1815,7 +1815,7 @@ Subclasses of :class:`Command` must define the following methods.
.. module:: distutils.command.bdist_msi
:synopsis: Build a binary distribution as a Windows MSI file
.. class:: bdist_msi
(Command)
.. class:: bdist_msi
Builds a `Windows Installer`_ (.msi) binary package.
...
...
Doc/distutils/introduction.rst
View file @
330fecde
...
...
@@ -79,11 +79,17 @@ Some observations:
for an example)
To create a source distribution for this module, you would create a setup
script, :file:`setup.py`, containing the above code, and run::
script, :file:`setup.py`, containing the above code, and run this command from a
terminal::
python setup.py sdist
which will create an archive file (e.g., tarball on Unix, ZIP file on Windows)
For Windows, open a command prompt windows ("DOS box") and change the command
to::
setup.py sdist
:command:`sdist` will create an archive file (e.g., tarball on Unix, ZIP file on Windows)
containing your setup script :file:`setup.py`, and your module :file:`foo.py`.
The archive file will be named :file:`foo-1.0.tar.gz` (or :file:`.zip`), and
will unpack into a directory :file:`foo-1.0`.
...
...
Doc/documenting/building.rst
View file @
330fecde
...
...
@@ -14,6 +14,7 @@ Using make
Luckily, a Makefile has been prepared so that on Unix, provided you have
installed Python and Subversion, you can just run ::
cd Doc
make html
to check out the necessary toolset in the `tools/` subdirectory and build the
...
...
Doc/documenting/markup.rst
View file @
330fecde
...
...
@@ -98,11 +98,12 @@ following example shows all of the features of this directive type::
Spam or ham the foo.
The signatures of object methods or data attributes should always include the
type name (``.. method:: FileInput.input(...)``), even if it is obvious from the
context which type they belong to; this is to enable consistent
cross-references. If you describe methods belonging to an abstract protocol,
such as "context managers", include a (pseudo-)type name too to make the
The signatures of object methods or data attributes should not include the
class name, but be nested in a class directive. The generated files will
reflect this nesting, and the target identifiers (for HTML output) will use
both the class and method name, to enable consistent cross-references. If you
describe methods belonging to an abstract protocol such as context managers,
use a class directive with a (pseudo-)type name too to make the
index entries more informative.
The directives are:
...
...
Doc/install/index.rst
View file @
330fecde
...
...
@@ -96,10 +96,16 @@ in the name of the downloaded archive, e.g. :file:`foo-1.0.tar.gz` or
directory: :file:`foo-1.0` or :file:`widget-0.9.7`. Additionally, the
distribution will contain a setup script :file:`setup.py`, and a file named
:file:`README.txt` or possibly just :file:`README`, which should explain that
building and installing the module distribution is a simple matter of running ::
building and installing the module distribution is a simple matter of running
one command from a terminal::
python setup.py install
For Windows, this command should be run from a command prompt windows ("DOS
box")::
setup.py install
If all these things are true, then you already know how to build and install the
modules you've just downloaded: Run the command above. Unless you need to
install things in a non-standard way or customize the build process, you don't
...
...
@@ -113,14 +119,11 @@ Standard Build and Install
==========================
As described in section :ref:`inst-new-standard`, building and installing a module
distribution using the Distutils is usually one simple command::
distribution using the Distutils is usually one simple command to run from a
terminal::
python setup.py install
On Unix, you'd run this command from a shell prompt; on Windows, you have to
open a command prompt window ("DOS box") and do it there; on Mac OS X, you open
a :command:`Terminal` window to get a shell prompt.
.. _inst-platform-variations:
...
...
Doc/library/collections.rst
View file @
330fecde
...
...
@@ -623,7 +623,9 @@ Example:
'Return a new OrderedDict which maps field names to their values'
return OrderedDict(zip(self._fields, self))
<BLANKLINE>
def _replace(_self, **kwds):
__dict__ = property(_asdict)
<BLANKLINE>
def _replace(_self, **kwds):
'Return a new Point object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('x', 'y'), _self))
if kwds:
...
...
Doc/library/functions.rst
View file @
330fecde
...
...
@@ -298,19 +298,18 @@ available. They are listed here in alphabetical order.
The resulting list is sorted alphabetically. For example:
>>> import struct
>>> dir() #
doctest: +SKIP
>>> dir() #
show the names in the module namespace
['__builtins__', '__doc__', '__name__', 'struct']
>>> dir(struct) #
doctest: +NORMALIZE_WHITESPACE
>>> dir(struct) #
show the names in the struct module
['Struct', '__builtins__', '__doc__', '__file__', '__name__',
'__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Foo(object):
... def __dir__(self):
... return ["kan", "ga", "roo"]
...
>>> f = Foo()
>>> dir(f)
['ga', 'kan', 'roo']
>>> class Shape(object):
def __dir__(self):
return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'perimeter', 'location']
.. note::
...
...
@@ -342,16 +341,22 @@ available. They are listed here in alphabetical order.
:term:`iterator`, or some other object which supports iteration. The
:meth:`!next` method of the iterator returned by :func:`enumerate` returns a
tuple containing a count (from *start* which defaults to 0) and the
corresponding value obtained from iterating over *iterable*.
:func:`enumerate` is useful for obtaining an indexed series: ``(0, seq[0])``,
``(1, seq[1])``, ``(2, seq[2])``, .... For example:
corresponding value obtained from iterating over *sequence*::
>>> for i, season in enumerate('Spring Summer Fall Winter'.split(), start=1):
print i, season
1 Spring
2 Summer
3 Fall
4 Winter
Equivalent to::
>>> for i, season in enumerate(['Spring', 'Summer', 'Fall', 'Winter']):
... print i, season
0 Spring
1 Summer
2 Fall
3 Winter
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
.. versionadded:: 2.3
.. versionadded:: 2.6
...
...
@@ -586,13 +591,12 @@ available. They are listed here in alphabetical order.
Equivalent to ``eval(raw_input(prompt))``.
..
warning
::
..
note
::
This function is not safe from user errors! It expects a valid Python
expression as input; if the input is not syntactically valid, a
:exc:`SyntaxError` will be raised. Other exceptions may be raised if there is an
error during evaluation. (On the other hand, sometimes this is exactly what you
need when writing a quick script for expert use.)
This function does not catch user errors. It expects a valid Python
expression as input. If the input is not syntactically valid, a
:exc:`SyntaxError` will be raised. Other exceptions may be raised if there
is an error during evaluation.
If the :mod:`readline` module was loaded, then :func:`input` will use it to
provide elaborate line editing and history features.
...
...
@@ -660,10 +664,10 @@ available. They are listed here in alphabetical order.
One useful application of the second form of :func:`iter` is to read lines of
a file until a certain line is reached. The following example reads a file
until
``"STOP"`` is reached:
::
until
the :meth:`readline` method returns an empty string
::
with open(
"mydata.txt"
) as fp:
for line in iter(fp.readline,
"STOP"
):
with open(
'mydata.txt'
) as fp:
for line in iter(fp.readline,
''
):
process_line(line)
.. versionadded:: 2.2
...
...
@@ -1241,8 +1245,9 @@ available. They are listed here in alphabetical order.
It can be called either on the class (such as ``C.f()``) or on an instance (such
as ``C().f()``). The instance is ignored except for its class.
Static methods in Python are similar to those found in Java or C++. For a more
advanced concept, see :func:`classmethod` in this section.
Static methods in Python are similar to those found in Java or C++. Also see
:func:`classmethod` for a variant that is useful for creating alternate
class constructors.
For more information on static methods, consult the documentation on the
standard type hierarchy in :ref:`types`.
...
...
@@ -1335,6 +1340,10 @@ available. They are listed here in alphabetical order.
argument form specifies the arguments exactly and makes the appropriate
references.
For practical suggestions on how to design cooperative classes using
:func:`super`, see `guide to using super()
<http://rhettinger.wordpress.com/2011/05/26/super-considered-super/>`_.
.. versionadded:: 2.2
...
...
Doc/license.rst
View file @
330fecde
...
...
@@ -889,7 +889,7 @@ expat
-----
The :mod:`pyexpat` extension is built using an included copy of the expat
sources unless the build is configured
:option:`--with-system-expat
`::
sources unless the build is configured
``--with-system-expat`
`::
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
and Clark Cooper
...
...
@@ -918,7 +918,7 @@ libffi
------
The :mod:`_ctypes` extension is built using an included copy of the libffi
sources unless the build is configured
:option:`--with-system-libffi
`::
sources unless the build is configured
``--with-system-libffi`
`::
Copyright (c) 1996-2008 Red Hat, Inc and others.
...
...
Doc/reference/datamodel.rst
View file @
330fecde
...
...
@@ -2308,7 +2308,7 @@ will not be supported.
*
In ``x * y``, if one opera
tor
is a sequence that implements sequence
In ``x * y``, if one opera
nd
is a sequence that implements sequence
repetition, and the other is an integer (:class:`int` or :class:`long`),
sequence repetition is invoked.
...
...
Doc/using/cmdline.rst
View file @
330fecde
...
...
@@ -569,7 +569,7 @@ Debug-mode variables
~~~~~~~~~~~~~~~~~~~~
Setting these variables only has an effect in a debug build of Python, that is,
if Python was configured with the
:option:`--with-pydebug
` build option.
if Python was configured with the
``--with-pydebug`
` build option.
.. envvar:: PYTHONTHREADDEBUG
...
...
Lib/collections.py
View file @
330fecde
...
...
@@ -312,6 +312,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False):
def _asdict(self):
'Return a new OrderedDict which maps field names to their values'
return OrderedDict(zip(self._fields, self))
\
n
__dict__ = property(_asdict)
\
n
def _replace(_self, **kwds):
'Return a new %(typename)s object replacing specified fields with new values'
result = _self._make(map(kwds.pop, %(field_names)r, _self))
...
...
Lib/decimal.py
View file @
330fecde
...
...
@@ -1942,9 +1942,9 @@ class Decimal(object):
nonzero. For efficiency, other._exp should not be too large,
so that 10**abs(other._exp) is a feasible calculation."""
# In the comments below, we write x for the value of self and
#
y for the value of other. Write x = xc*10**xe and y =
#
yc*10**ye
.
# In the comments below, we write x for the value of self and
y for the
#
value of other. Write x = xc*10**xe and abs(y) = yc*10**ye, with xc
#
and yc positive integers not divisible by 10
.
# The main purpose of this method is to identify the *failure*
# of x**y to be exactly representable with as little effort as
...
...
@@ -1952,13 +1952,12 @@ class Decimal(object):
# eliminate the possibility of x**y being exact. Only if all
# these tests are passed do we go on to actually compute x**y.
# Here's the main idea. First normalize both x and y. We
# express y as a rational m/n, with m and n relatively prime
# and n>0. Then for x**y to be exactly representable (at
# *any* precision), xc must be the nth power of a positive
# integer and xe must be divisible by n. If m is negative
# then additionally xc must be a power of either 2 or 5, hence
# a power of 2**n or 5**n.
# Here's the main idea. Express y as a rational number m/n, with m and
# n relatively prime and n>0. Then for x**y to be exactly
# representable (at *any* precision), xc must be the nth power of a
# positive integer and xe must be divisible by n. If y is negative
# then additionally xc must be a power of either 2 or 5, hence a power
# of 2**n or 5**n.
#
# There's a limit to how small |y| can be: if y=m/n as above
# then:
...
...
@@ -2030,21 +2029,43 @@ class Decimal(object):
return
None
# now xc is a power of 2; e is its exponent
e
=
_nbits
(
xc
)
-
1
# find e*y and xe*y; both must be integers
if
ye
>=
0
:
y_as_int
=
yc
*
10
**
ye
e
=
e
*
y_as_int
xe
=
xe
*
y_as_int
else
:
ten_pow
=
10
**-
ye
e
,
remainder
=
divmod
(
e
*
yc
,
ten_pow
)
if
remainder
:
return
None
xe
,
remainder
=
divmod
(
xe
*
yc
,
ten_pow
)
if
remainder
:
return
None
if
e
*
65
>=
p
*
93
:
# 93/65 > log(10)/log(5)
# We now have:
#
# x = 2**e * 10**xe, e > 0, and y < 0.
#
# The exact result is:
#
# x**y = 5**(-e*y) * 10**(e*y + xe*y)
#
# provided that both e*y and xe*y are integers. Note that if
# 5**(-e*y) >= 10**p, then the result can't be expressed
# exactly with p digits of precision.
#
# Using the above, we can guard against large values of ye.
# 93/65 is an upper bound for log(10)/log(5), so if
#
# ye >= len(str(93*p//65))
#
# then
#
# -e*y >= -y >= 10**ye > 93*p/65 > p*log(10)/log(5),
#
# so 5**(-e*y) >= 10**p, and the coefficient of the result
# can't be expressed in p digits.
# emax >= largest e such that 5**e < 10**p.
emax
=
p
*
93
//
65
if
ye
>=
len
(
str
(
emax
)):
return
None
# Find -e*y and -xe*y; both must be integers
e
=
_decimal_lshift_exact
(
e
*
yc
,
ye
)
xe
=
_decimal_lshift_exact
(
xe
*
yc
,
ye
)
if
e
is
None
or
xe
is
None
:
return
None
if
e
>
emax
:
return
None
xc
=
5
**
e
...
...
@@ -2058,19 +2079,20 @@ class Decimal(object):
while
xc
%
5
==
0
:
xc
//=
5
e
-=
1
if
ye
>=
0
:
y_as_integer
=
yc
*
10
**
ye
e
=
e
*
y_as_integer
xe
=
xe
*
y_as_integer
else
:
ten_pow
=
10
**-
ye
e
,
remainder
=
divmod
(
e
*
yc
,
ten_pow
)
if
remainder
:
return
None
xe
,
remainder
=
divmod
(
xe
*
yc
,
ten_pow
)
if
remainder
:
return
None
if
e
*
3
>=
p
*
10
:
# 10/3 > log(10)/log(2)
# Guard against large values of ye, using the same logic as in
# the 'xc is a power of 2' branch. 10/3 is an upper bound for
# log(10)/log(2).
emax
=
p
*
10
//
3
if
ye
>=
len
(
str
(
emax
)):
return
None
e
=
_decimal_lshift_exact
(
e
*
yc
,
ye
)
xe
=
_decimal_lshift_exact
(
xe
*
yc
,
ye
)
if
e
is
None
or
xe
is
None
:
return
None
if
e
>
emax
:
return
None
xc
=
2
**
e
else
:
...
...
@@ -5463,6 +5485,27 @@ def _nbits(n, correction = {
hex_n
=
"%x"
%
n
return
4
*
len
(
hex_n
)
-
correction
[
hex_n
[
0
]]
def
_decimal_lshift_exact
(
n
,
e
):
""" Given integers n and e, return n * 10**e if it's an integer, else None.
The computation is designed to avoid computing large powers of 10
unnecessarily.
>>> _decimal_lshift_exact(3, 4)
30000
>>> _decimal_lshift_exact(300, -999999999) # returns None
"""
if
n
==
0
:
return
0
elif
e
>=
0
:
return
n
*
10
**
e
else
:
# val_n = largest power of 10 dividing n.
str_n
=
str
(
abs
(
n
))
val_n
=
len
(
str_n
)
-
len
(
str_n
.
rstrip
(
'0'
))
return
None
if
val_n
<
-
e
else
n
//
10
**-
e
def
_sqrt_nearest
(
n
,
a
):
"""Closest integer to the square root of the positive integer n. a is
an initial approximation to the square root. Any positive integer
...
...
Lib/ntpath.py
View file @
330fecde
...
...
@@ -521,3 +521,13 @@ def relpath(path, start=curdir):
if
not
rel_list
:
return
curdir
return
join
(
*
rel_list
)
try
:
# The genericpath.isdir implementation uses os.stat and checks the mode
# attribute to tell whether or not the path is a directory.
# This is overkill on Windows - just pass the path to GetFileAttributes
# and check the attribute from there.
from
nt
import
_isdir
as
isdir
except
ImportError
:
# Use genericpath.isdir as imported above.
pass
Lib/subprocess.py
View file @
330fecde
...
...
@@ -707,7 +707,10 @@ class Popen(object):
def
__del__
(
self
,
_maxint
=
sys
.
maxint
,
_active
=
_active
):
if
not
self
.
_child_created
:
# If __init__ hasn't had a chance to execute (e.g. if it
# was passed an undeclared keyword argument), we don't
# have a _child_created attribute at all.
if
not
getattr
(
self
,
'_child_created'
,
False
):
# We didn't get to successfully create a child process.
return
# In case the child hasn't been waited on, check if it's done.
...
...
Lib/test/cjkencodings/iso2022_jp-utf8.txt
0 → 100644
View file @
330fecde
Python の開発は、1990 年ごろから開始されています。
開発者の Guido van Rossum は教育用のプログラミング言語「ABC」の開発に参加していましたが、ABC は実用上の目的にはあまり適していませんでした。
このため、Guido はより実用的なプログラミング言語の開発を開始し、英国 BBS 放送のコメディ番組「モンティ パイソン」のファンである Guido はこの言語を「Python」と名づけました。
このような背景から生まれた Python の言語設計は、「シンプル」で「習得が容易」という目標に重点が置かれています。
多くのスクリプト系言語ではユーザの目先の利便性を優先して色々な機能を言語要素として取り入れる場合が多いのですが、Python ではそういった小細工が追加されることはあまりありません。
言語自体の機能は最小限に押さえ、必要な機能は拡張モジュールとして追加する、というのが Python のポリシーです。
Lib/test/cjkencodings/iso2022_jp.txt
0 → 100644
View file @
330fecde
Python $B$N3+H/$O!"(B1990 $BG/$4$m$+$i3+;O$5$l$F$$$^$9!#(B
$B3+H/<T$N(B Guido van Rossum $B$O650iMQ$N%W%m%0%i%_%s%08@8l!V(BABC$B!W$N3+H/$K;22C$7$F$$$^$7$?$,!"(BABC $B$O<BMQ>e$NL\E*$K$O$"$^$jE,$7$F$$$^$;$s$G$7$?!#(B
$B$3$N$?$a!"(BGuido $B$O$h$j<BMQE*$J%W%m%0%i%_%s%08@8l$N3+H/$r3+;O$7!"1Q9q(B BBS $BJ|Aw$N%3%a%G%#HVAH!V%b%s%F%#(B $B%Q%$%=%s!W$N%U%!%s$G$"$k(B Guido $B$O$3$N8@8l$r!V(BPython$B!W$HL>$E$1$^$7$?!#(B
$B$3$N$h$&$JGX7J$+$i@8$^$l$?(B Python $B$N8@8l@_7W$O!"!V%7%s%W%k!W$G!V=,F@$,MF0W!W$H$$$&L\I8$K=EE@$,CV$+$l$F$$$^$9!#(B
$BB?$/$N%9%/%j%W%H7O8@8l$G$O%f!<%6$NL\@h$NMxJX@-$rM%@h$7$F?'!9$J5!G=$r8@8lMWAG$H$7$F<h$jF~$l$k>l9g$,B?$$$N$G$9$,!"(BPython $B$G$O$=$&$$$C$?>.:Y9)$,DI2C$5$l$k$3$H$O$"$^$j$"$j$^$;$s!#(B
$B8@8l<+BN$N5!G=$O:G>.8B$K2!$5$(!"I,MW$J5!G=$O3HD%%b%8%e!<%k$H$7$FDI2C$9$k!"$H$$$&$N$,(B Python $B$N%]%j%7!<$G$9!#(B
Lib/test/cjkencodings/iso2022_kr-utf8.txt
0 → 100644
View file @
330fecde
◎ 파이썬(Python)은 배우기 쉽고, 강력한 프로그래밍 언어입니다. 파이썬은
효율적인 고수준 데이터 구조와 간단하지만 효율적인 객체지향프로그래밍을
지원합니다. 파이썬의 우아(優雅)한 문법과 동적 타이핑, 그리고 인터프리팅
환경은 파이썬을 스크립팅과 여러 분야에서와 대부분의 플랫폼에서의 빠른
애플리케이션 개발을 할 수 있는 이상적인 언어로 만들어줍니다.
☆첫가끝: 날아라 쓩~ 큼! 금없이 전니다. 그런거 다.
Lib/test/cjkencodings/iso2022_kr.txt
0 → 100644
View file @
330fecde
$)C!] FD@L=c(Python)@: 9h?l1b =10m, 0-7BGQ GA7N1W7!9V >p>n@T4O4Y. FD@L=c@:
H?@2@{@N 0m<vAX 5%@LEM 18A6?M 0#4\GOAv88 H?@2@{@N 04C<AvGbGA7N1W7!9V@;
Av?xGU4O4Y. FD@L=c@G ?l>F(iPd:)GQ 9.9}0z 5?@{ E8@LGN, 1W8.0m @NEMGA8.FC
H/0f@: FD@L=c@; =:E)83FC0z ?)7/ :P>_?!<-?M 4k:N:P@G GC7'F{?!<-@G :|8%
>VGC8.DI@L<G 039_@; GR <v @V4B @L;s@{@N >p>n7N 885i>nA]4O4Y.
!YC90!3!: 3/>F6s >1~ E-! 1]>x@L @|4O4Y. 1W710E 4Y.
Lib/test/decimaltestdata/extra.decTest
View file @
330fecde
...
...
@@ -222,12 +222,25 @@ extr1700 power 10 1e-999999999 -> 1.000000000000000 Inexact Rounded
extr1701 power 100.0 -557.71e-742888888 -> 1.000000000000000 Inexact Rounded
extr1702 power 10 1e-100 -> 1.000000000000000 Inexact Rounded
-- Another one (see issue #12080). Thanks again to Stefan Krah.
extr1703 power 4 -1.2e-999999999 -> 1.000000000000000 Inexact Rounded
-- A couple of interesting exact cases for power. Note that the specification
-- requires these to be reported as Inexact.
extr1710 power 1e375 56e-3 -> 1.000000000000000E+21 Inexact Rounded
extr1711 power 10000 0.75 -> 1000.000000000000 Inexact Rounded
extr1712 power 1e-24 0.875 -> 1.000000000000000E-21 Inexact Rounded
-- Some more exact cases, exercising power with negative second argument.
extr1720 power 400 -0.5 -> 0.05000000000000000 Inexact Rounded
extr1721 power 4096 -0.75 -> 0.001953125000000000 Inexact Rounded
extr1722 power 625e4 -0.25 -> 0.02000000000000000 Inexact Rounded
-- Nonexact cases, to exercise some of the early exit conditions from
-- _power_exact.
extr1730 power 2048 -0.75 -> 0.003284751622084822 Inexact Rounded
-- Tests for the is_* boolean operations
precision: 9
maxExponent: 999
...
...
Lib/test/test_codecencodings_iso2022.py
0 → 100644
View file @
330fecde
#!/usr/bin/env python
#
# Codec encoding tests for ISO 2022 encodings.
from
test
import
test_support
from
test
import
test_multibytecodec_support
import
unittest
COMMON_CODEC_TESTS
=
(
# invalid bytes
(
b'ab
\
xFF
cd'
,
'replace'
,
u'ab
\
uFFFD
cd'
),
(
b'ab
\
x1B
def'
,
'replace'
,
u'ab
\
x1B
def'
),
(
b'ab
\
x1B
$def'
,
'replace'
,
u'ab
\
uFFFD
'
),
)
class
Test_ISO2022_JP
(
test_multibytecodec_support
.
TestBase
,
unittest
.
TestCase
):
encoding
=
'iso2022_jp'
tstring
=
test_multibytecodec_support
.
load_teststring
(
'iso2022_jp'
)
codectests
=
COMMON_CODEC_TESTS
+
(
(
b'ab
\
x1B
Ndef'
,
'replace'
,
u'ab
\
x1B
Ndef'
),
)
class
Test_ISO2022_JP2
(
test_multibytecodec_support
.
TestBase
,
unittest
.
TestCase
):
encoding
=
'iso2022_jp_2'
tstring
=
test_multibytecodec_support
.
load_teststring
(
'iso2022_jp'
)
codectests
=
COMMON_CODEC_TESTS
+
(
(
b'ab
\
x1B
Ndef'
,
'replace'
,
u'abdef'
),
)
class
Test_ISO2022_KR
(
test_multibytecodec_support
.
TestBase
,
unittest
.
TestCase
):
encoding
=
'iso2022_kr'
tstring
=
test_multibytecodec_support
.
load_teststring
(
'iso2022_kr'
)
codectests
=
COMMON_CODEC_TESTS
+
(
(
b'ab
\
x1B
Ndef'
,
'replace'
,
u'ab
\
x1B
Ndef'
),
)
# iso2022_kr.txt cannot be used to test "chunk coding": the escape
# sequence is only written on the first line
def
test_chunkcoding
(
self
):
pass
def
test_main
():
test_support
.
run_unittest
(
__name__
)
if
__name__
==
"__main__"
:
test_main
()
Lib/test/test_collections.py
View file @
330fecde
...
...
@@ -78,12 +78,12 @@ class TestNamedTuple(unittest.TestCase):
self
.
assertRaises
(
TypeError
,
eval
,
'Point(XXX=1, y=2)'
,
locals
())
# wrong keyword argument
self
.
assertRaises
(
TypeError
,
eval
,
'Point(x=1)'
,
locals
())
# missing keyword argument
self
.
assertEqual
(
repr
(
p
),
'Point(x=11, y=22)'
)
self
.
assertNotIn
(
'__dict__'
,
dir
(
p
))
# verify instance has no dict
self
.
assertNotIn
(
'__weakref__'
,
dir
(
p
))
self
.
assertEqual
(
p
,
Point
.
_make
([
11
,
22
]))
# test _make classmethod
self
.
assertEqual
(
p
.
_fields
,
(
'x'
,
'y'
))
# test _fields attribute
self
.
assertEqual
(
p
.
_replace
(
x
=
1
),
(
1
,
22
))
# test _replace method
self
.
assertEqual
(
p
.
_asdict
(),
dict
(
x
=
11
,
y
=
22
))
# test _asdict method
self
.
assertEqual
(
vars
(
p
),
p
.
_asdict
())
# verify that vars() works
try
:
p
.
_replace
(
x
=
1
,
error
=
2
)
...
...
Lib/test/test_multibytecodec_support.py
View file @
330fecde
...
...
@@ -44,13 +44,24 @@ class TestBase:
def
test_errorhandle
(
self
):
for
source
,
scheme
,
expected
in
self
.
codectests
:
if
type
(
source
)
==
type
(
''
):
if
isinstance
(
source
,
bytes
):
func
=
self
.
decode
else
:
func
=
self
.
encode
if
expected
:
result
=
func
(
source
,
scheme
)[
0
]
self
.
assertEqual
(
result
,
expected
)
if
func
is
self
.
decode
:
self
.
assertTrue
(
type
(
result
)
is
unicode
,
type
(
result
))
self
.
assertEqual
(
result
,
expected
,
'%r.decode(%r, %r)=%r != %r'
%
(
source
,
self
.
encoding
,
scheme
,
result
,
expected
))
else
:
self
.
assertTrue
(
type
(
result
)
is
bytes
,
type
(
result
))
self
.
assertEqual
(
result
,
expected
,
'%r.encode(%r, %r)=%r != %r'
%
(
source
,
self
.
encoding
,
scheme
,
result
,
expected
))
else
:
self
.
assertRaises
(
UnicodeError
,
func
,
source
,
scheme
)
...
...
@@ -251,6 +262,7 @@ class TestBase_Mapping(unittest.TestCase):
pass_enctest
=
[]
pass_dectest
=
[]
supmaps
=
[]
codectests
=
[]
def
__init__
(
self
,
*
args
,
**
kw
):
unittest
.
TestCase
.
__init__
(
self
,
*
args
,
**
kw
)
...
...
@@ -329,6 +341,30 @@ class TestBase_Mapping(unittest.TestCase):
self
.
fail
(
'Decoding failed while testing %s -> %s: %s'
%
(
repr
(
csetch
),
repr
(
unich
),
exc
.
reason
))
def
test_errorhandle
(
self
):
for
source
,
scheme
,
expected
in
self
.
codectests
:
if
isinstance
(
source
,
bytes
):
func
=
source
.
decode
else
:
func
=
source
.
encode
if
expected
:
if
isinstance
(
source
,
bytes
):
result
=
func
(
self
.
encoding
,
scheme
)
self
.
assertTrue
(
type
(
result
)
is
unicode
,
type
(
result
))
self
.
assertEqual
(
result
,
expected
,
'%r.decode(%r, %r)=%r != %r'
%
(
source
,
self
.
encoding
,
scheme
,
result
,
expected
))
else
:
result
=
func
(
self
.
encoding
,
scheme
)
self
.
assertTrue
(
type
(
result
)
is
bytes
,
type
(
result
))
self
.
assertEqual
(
result
,
expected
,
'%r.encode(%r, %r)=%r != %r'
%
(
source
,
self
.
encoding
,
scheme
,
result
,
expected
))
else
:
self
.
assertRaises
(
UnicodeError
,
func
,
self
.
encoding
,
scheme
)
def
load_teststring
(
name
):
dir
=
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'cjkencodings'
)
with
open
(
os
.
path
.
join
(
dir
,
name
+
'.txt'
),
'rb'
)
as
f
:
...
...
Lib/test/test_subprocess.py
View file @
330fecde
...
...
@@ -113,6 +113,16 @@ class ProcessTestCase(BaseTestCase):
env
=
newenv
)
self
.
assertEqual
(
rc
,
1
)
def
test_invalid_args
(
self
):
# Popen() called with invalid arguments should raise TypeError
# but Popen.__del__ should not complain (issue #12085)
with
test_support
.
captured_stderr
()
as
s
:
self
.
assertRaises
(
TypeError
,
subprocess
.
Popen
,
invalid_arg_name
=
1
)
argcount
=
subprocess
.
Popen
.
__init__
.
__code__
.
co_argcount
too_many_args
=
[
0
]
*
(
argcount
+
1
)
self
.
assertRaises
(
TypeError
,
subprocess
.
Popen
,
*
too_many_args
)
self
.
assertEqual
(
s
.
getvalue
(),
''
)
def
test_stdin_none
(
self
):
# .stdin is None when not redirected
p
=
subprocess
.
Popen
([
sys
.
executable
,
"-c"
,
'print "banana"'
],
...
...
Lib/test/test_support.py
View file @
330fecde
...
...
@@ -833,6 +833,9 @@ def captured_stdout():
"""
return
captured_output
(
"stdout"
)
def
captured_stderr
():
return
captured_output
(
"stderr"
)
def
captured_stdin
():
return
captured_output
(
"stdin"
)
...
...
Lib/test/test_zipfile.py
View file @
330fecde
...
...
@@ -335,6 +335,24 @@ class TestsWithSourceFile(unittest.TestCase):
with
zipfile
.
ZipFile
(
f
,
"r"
)
as
zipfp
:
self
.
assertEqual
(
zipfp
.
namelist
(),
[
TESTFN
])
def
test_ignores_newline_at_end
(
self
):
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
,
zipfile
.
ZIP_STORED
)
as
zipfp
:
zipfp
.
write
(
TESTFN
,
TESTFN
)
with
open
(
TESTFN2
,
'a'
)
as
f
:
f
.
write
(
"
\
r
\
n
\
00
\
00
\
00
"
)
with
zipfile
.
ZipFile
(
TESTFN2
,
"r"
)
as
zipfp
:
self
.
assertIsInstance
(
zipfp
,
zipfile
.
ZipFile
)
def
test_ignores_stuff_appended_past_comments
(
self
):
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
,
zipfile
.
ZIP_STORED
)
as
zipfp
:
zipfp
.
comment
=
b"this is a comment"
zipfp
.
write
(
TESTFN
,
TESTFN
)
with
open
(
TESTFN2
,
'a'
)
as
f
:
f
.
write
(
"abcdef
\
r
\
n
"
)
with
zipfile
.
ZipFile
(
TESTFN2
,
"r"
)
as
zipfp
:
self
.
assertIsInstance
(
zipfp
,
zipfile
.
ZipFile
)
self
.
assertEqual
(
zipfp
.
comment
,
b"this is a comment"
)
def
test_write_default_name
(
self
):
"""Check that calling ZipFile.write without arcname specified
produces the expected result."""
...
...
Lib/zipfile.py
View file @
330fecde
...
...
@@ -236,16 +236,14 @@ def _EndRecData(fpin):
# found the magic number; attempt to unpack and interpret
recData
=
data
[
start
:
start
+
sizeEndCentDir
]
endrec
=
list
(
struct
.
unpack
(
structEndArchive
,
recData
))
comment
=
data
[
start
+
sizeEndCentDir
:]
# check that comment length is correct
if
endrec
[
_ECD_COMMENT_SIZE
]
==
len
(
comment
):
# Append the archive comment and start offset
endrec
.
append
(
comment
)
endrec
.
append
(
maxCommentStart
+
start
)
# Try to read the "Zip64 end of central directory" structure
return
_EndRecData64
(
fpin
,
maxCommentStart
+
start
-
filesize
,
endrec
)
commentSize
=
endrec
[
_ECD_COMMENT_SIZE
]
#as claimed by the zip file
comment
=
data
[
start
+
sizeEndCentDir
:
start
+
sizeEndCentDir
+
commentSize
]
endrec
.
append
(
comment
)
endrec
.
append
(
maxCommentStart
+
start
)
# Try to read the "Zip64 end of central directory" structure
return
_EndRecData64
(
fpin
,
maxCommentStart
+
start
-
filesize
,
endrec
)
# Unable to find a valid end of central directory structure
return
...
...
Misc/ACKS
View file @
330fecde
...
...
@@ -608,6 +608,7 @@ Piet van Oostrum
Jason Orendorff
Douglas Orr
Michele Orrù
Oleg Oshmyan
Denis S. Otkidach
Michael Otteneder
R. M. Oudkerk
...
...
Misc/NEWS
View file @
330fecde
Python
News
+++++++++++
What
's New in Python 2.7.3?
===========================
*Release date: XXXX-XX-XX*
Core and Builtins
-----------------
- Issue #1195: my_fgets() now always clears errors before calling fgets(). Fix
the following case: sys.stdin.read() stopped with CTRL+d (end of file),
raw_input() interrupted by CTRL+c.
Library
-------
- Issue #10694: zipfile now ignores garbage at the end of a zipfile.
- Issue #11583: Speed up os.path.isdir on Windows by using GetFileAttributes
instead of os.stat.
- Issue #12080: Fix a performance issue in Decimal._power_exact that caused
some corner-case Decimal.__pow__ calls to take an unreasonably long time.
- Named tuples now work correctly with vars().
- sys.setcheckinterval() now updates the current ticker count as well as updating
the check interval, so if the user decreases the check interval, the ticker
doesn'
t
have
to
wind
down
to
zero
from
the
old
starting
point
before
the
new
interval
takes
effect
.
And
if
the
user
increases
the
interval
,
it
makes
sure
the
new
limit
takes
effect
right
away
rather
have
an
early
task
switch
before
recognizing
the
new
interval
.
-
Issue
#
12085
:
Fix
an
attribute
error
in
subprocess
.
Popen
destructor
if
the
constructor
has
failed
,
e
.
g
.
because
of
an
undeclared
keyword
argument
.
Patch
written
by
Oleg
Oshmyan
.
Tests
-----
-
Issue
#
12057
:
Add
tests
for
ISO
2022
codecs
(
iso2022_jp
,
iso2022_jp_2
,
iso2022_kr
).
What
's New in Python 2.7.2?
===========================
...
...
Modules/cjkcodecs/_codecs_hk.c
View file @
330fecde
...
...
@@ -115,55 +115,56 @@ DECODER(big5hkscs)
REQUIRE_INBUF
(
2
)
if
(
0xc6
<=
c
&&
c
<=
0xc8
&&
(
c
>=
0xc7
||
IN2
>=
0xa1
))
goto
hkscsdec
;
if
(
0xc6
>
c
||
c
>
0xc8
||
(
c
<
0xc7
&&
IN2
<
0xa1
))
{
TRYMAP_DEC
(
big5
,
**
outbuf
,
c
,
IN2
)
{
NEXT
(
2
,
1
)
continue
;
}
}
TRYMAP_DEC
(
big5hkscs
,
decoded
,
c
,
IN2
)
{
int
s
=
BH2S
(
c
,
IN2
);
const
unsigned
char
*
hintbase
;
assert
(
0x87
<=
c
&&
c
<=
0xfe
);
assert
(
0x40
<=
IN2
&&
IN2
<=
0xfe
);
if
(
BH2S
(
0x87
,
0x40
)
<=
s
&&
s
<=
BH2S
(
0xa0
,
0xfe
))
{
hintbase
=
big5hkscs_phint_0
;
s
-=
BH2S
(
0x87
,
0x40
);
}
else
if
(
BH2S
(
0xc6
,
0xa1
)
<=
s
&&
s
<=
BH2S
(
0xc8
,
0xfe
)){
hintbase
=
big5hkscs_phint_12130
;
s
-=
BH2S
(
0xc6
,
0xa1
);
}
else
if
(
BH2S
(
0xf9
,
0xd6
)
<=
s
&&
s
<=
BH2S
(
0xfe
,
0xfe
)){
hintbase
=
big5hkscs_phint_21924
;
s
-=
BH2S
(
0xf9
,
0xd6
);
}
else
return
MBERR_INTERNAL
;
TRYMAP_DEC
(
big5
,
**
outbuf
,
c
,
IN2
)
{
NEXT
(
2
,
1
)
if
(
hintbase
[
s
>>
3
]
&
(
1
<<
(
s
&
7
)))
{
WRITEUCS4
(
decoded
|
0x20000
)
NEXT_IN
(
2
)
}
else
{
OUT1
(
decoded
)
NEXT
(
2
,
1
)
}
continue
;
}
else
hkscsdec:
TRYMAP_DEC
(
big5hkscs
,
decoded
,
c
,
IN2
)
{
int
s
=
BH2S
(
c
,
IN2
);
const
unsigned
char
*
hintbase
;
assert
(
0x87
<=
c
&&
c
<=
0xfe
);
assert
(
0x40
<=
IN2
&&
IN2
<=
0xfe
);
if
(
BH2S
(
0x87
,
0x40
)
<=
s
&&
s
<=
BH2S
(
0xa0
,
0xfe
))
{
hintbase
=
big5hkscs_phint_0
;
s
-=
BH2S
(
0x87
,
0x40
);
}
else
if
(
BH2S
(
0xc6
,
0xa1
)
<=
s
&&
s
<=
BH2S
(
0xc8
,
0xfe
)){
hintbase
=
big5hkscs_phint_12130
;
s
-=
BH2S
(
0xc6
,
0xa1
);
}
else
if
(
BH2S
(
0xf9
,
0xd6
)
<=
s
&&
s
<=
BH2S
(
0xfe
,
0xfe
)){
hintbase
=
big5hkscs_phint_21924
;
s
-=
BH2S
(
0xf9
,
0xd6
);
}
else
return
MBERR_INTERNAL
;
if
(
hintbase
[
s
>>
3
]
&
(
1
<<
(
s
&
7
)))
{
WRITEUCS4
(
decoded
|
0x20000
)
NEXT_IN
(
2
)
}
else
{
OUT1
(
decoded
)
NEXT
(
2
,
1
)
}
}
else
{
switch
((
c
<<
8
)
|
IN2
)
{
case
0x8862
:
WRITE2
(
0x00ca
,
0x0304
);
break
;
case
0x8864
:
WRITE2
(
0x00ca
,
0x030c
);
break
;
case
0x88a3
:
WRITE2
(
0x00ea
,
0x0304
);
break
;
case
0x88a5
:
WRITE2
(
0x00ea
,
0x030c
);
break
;
default:
return
2
;
}
NEXT
(
2
,
2
)
/* all decoded codepoints are pairs, above. */
switch
((
c
<<
8
)
|
IN2
)
{
case
0x8862
:
WRITE2
(
0x00ca
,
0x0304
);
break
;
case
0x8864
:
WRITE2
(
0x00ca
,
0x030c
);
break
;
case
0x88a3
:
WRITE2
(
0x00ea
,
0x0304
);
break
;
case
0x88a5
:
WRITE2
(
0x00ea
,
0x030c
);
break
;
default:
return
2
;
}
NEXT
(
2
,
2
)
/* all decoded codepoints are pairs, above. */
}
return
0
;
...
...
Modules/cjkcodecs/_codecs_jp.c
View file @
330fecde
...
...
@@ -371,11 +371,11 @@ DECODER(euc_jp)
REQUIRE_OUTBUF
(
1
)
if
(
c
<
0x80
)
{
OUT1
(
c
)
NEXT
(
1
,
1
)
continue
;
}
if
(
c
<
0x80
)
{
OUT1
(
c
)
NEXT
(
1
,
1
)
continue
;
}
if
(
c
==
0x8e
)
{
/* JIS X 0201 half-width katakana */
...
...
Modules/posixmodule.c
View file @
330fecde
...
...
@@ -4199,6 +4199,44 @@ win32_kill(PyObject *self, PyObject *args)
CloseHandle
(
handle
);
return
result
;
}
PyDoc_STRVAR
(
posix__isdir__doc__
,
"Return true if the pathname refers to an existing directory."
);
static
PyObject
*
posix__isdir
(
PyObject
*
self
,
PyObject
*
args
)
{
PyObject
*
opath
;
char
*
path
;
PyUnicodeObject
*
po
;
DWORD
attributes
;
if
(
PyArg_ParseTuple
(
args
,
"U|:_isdir"
,
&
po
))
{
Py_UNICODE
*
wpath
=
PyUnicode_AS_UNICODE
(
po
);
attributes
=
GetFileAttributesW
(
wpath
);
if
(
attributes
==
INVALID_FILE_ATTRIBUTES
)
Py_RETURN_FALSE
;
goto
check
;
}
/* Drop the argument parsing error as narrow strings
are also valid. */
PyErr_Clear
();
if
(
!
PyArg_ParseTuple
(
args
,
"et:_isdir"
,
Py_FileSystemDefaultEncoding
,
&
path
))
return
NULL
;
attributes
=
GetFileAttributesA
(
path
);
if
(
attributes
==
INVALID_FILE_ATTRIBUTES
)
Py_RETURN_FALSE
;
check:
if
(
attributes
&
FILE_ATTRIBUTE_DIRECTORY
)
Py_RETURN_TRUE
;
else
Py_RETURN_FALSE
;
}
#endif
/* MS_WINDOWS */
#ifdef HAVE_PLOCK
...
...
@@ -8968,6 +9006,7 @@ static PyMethodDef posix_methods[] = {
{
"abort"
,
posix_abort
,
METH_NOARGS
,
posix_abort__doc__
},
#ifdef MS_WINDOWS
{
"_getfullpathname"
,
posix__getfullpathname
,
METH_VARARGS
,
NULL
},
{
"_isdir"
,
posix__isdir
,
METH_VARARGS
,
posix__isdir__doc__
},
#endif
#ifdef HAVE_GETLOADAVG
{
"getloadavg"
,
posix_getloadavg
,
METH_NOARGS
,
posix_getloadavg__doc__
},
...
...
Modules/threadmodule.c
View file @
330fecde
...
...
@@ -715,7 +715,7 @@ thread_PyThread_exit_thread(PyObject *self)
PyDoc_STRVAR
(
exit_doc
,
"exit()
\n
\
(
PyThread_
exit_thread() is an obsolete synonym)
\n
\
(exit_thread() is an obsolete synonym)
\n
\
\n
\
This is synonymous to ``raise SystemExit''. It will cause the current
\n
\
thread to exit silently unless the exception is caught."
);
...
...
Parser/myreadline.c
View file @
330fecde
...
...
@@ -44,6 +44,7 @@ my_fgets(char *buf, int len, FILE *fp)
if
(
PyOS_InputHook
!=
NULL
)
(
void
)(
PyOS_InputHook
)();
errno
=
0
;
clearerr
(
fp
);
p
=
fgets
(
buf
,
len
,
fp
);
if
(
p
!=
NULL
)
return
0
;
/* No error */
...
...
Python/sysmodule.c
View file @
330fecde
...
...
@@ -466,6 +466,7 @@ sys_setcheckinterval(PyObject *self, PyObject *args)
{
if
(
!
PyArg_ParseTuple
(
args
,
"i:setcheckinterval"
,
&
_Py_CheckInterval
))
return
NULL
;
_Py_Ticker
=
_Py_CheckInterval
;
Py_INCREF
(
Py_None
);
return
Py_None
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment