Commit Graph

15985 Commits

Author SHA1 Message Date
Guido van Rossum
ab782dd6cc Document rich comparisons. 2001-01-18 15:17:06 +00:00
Guido van Rossum
67345eb03f Updated for 2.1; removed references to BeOpen.com and PythonLabs.
Added Copyright GvR.
2001-01-18 14:51:12 +00:00
Guido van Rossum
d94ade1fcc Add my name to the copyright notice. 2001-01-18 14:50:11 +00:00
Guido van Rossum
71500c8293 Add note about copyright ownership and license situation. 2001-01-18 14:39:49 +00:00
Guido van Rossum
a88479f0e3 - Add note about complex numbers.
- Changed description of rich comparisons to emphasize that < and >
  (etc.) are each other's reflection.  Also use this word in the note
  about the demise of __rcmp__.
2001-01-18 14:28:08 +00:00
Skip Montanaro
9483bed6d9 correct typo - closes bug #129205 2001-01-18 10:44:08 +00:00
Ka-Ping Yee
3a9582fbe5 Fix the example (it didn't seem to reflect reality). 2001-01-18 07:50:17 +00:00
Andrew M. Kuchling
6f477a6c07 Remove build/ subdirectory in "clean" target, not "clobber" 2001-01-18 04:40:27 +00:00
Tim Peters
691e0e95de Variant of SF patch 103252: Startup optimize: read *.pyc as string, not with getc(). 2001-01-18 04:39:16 +00:00
Tim Peters
60f42b50d8 Move distributed and duplicated config for stat() and fstat() into pyport.h. 2001-01-18 03:03:16 +00:00
Tim Peters
d2bf3b7ca6 Whitespace normalization. Leaving tokenize_tests.py alone for now. 2001-01-18 02:22:22 +00:00
Guido van Rossum
be4cbb1668 Use rich comparisons to fulfill an old wish: complex numbers now raise
exceptions when compared using <, <=, > or >=.

NOTE: This is a tentative change: this means that cmp() involving
complex numbers will raise an exception when the numbers differ, and
that in turn means that e.g. dictionaries and certain other compounds
(e.g. UserLists) containing complex numbers can't be compared either.
So we'll have to decide whether this is acceptable.  The alpha test
cycle is a good time to keep an eye on this!
2001-01-18 01:12:39 +00:00
Guido van Rossum
9d19cb8a70 Same treatment as listobject.c:
- In count(), remove(), index(): call RichCompare(Py_EQ).

- Get rid of array_compare(), in favor of new array_richcompare() (a
  near clone of list_compare()).

- Aligned items in array_methods initializer and comments for type
  struct initializer.

- Folded a few long lines.
2001-01-18 01:02:55 +00:00
Guido van Rossum
b932420cc7 Rich comparisons:
- Use PyObject_RichCompareBool() when comparing keys; this makes the
  error handling cleaner.

- There were two implementations for dictionary comparison, an old one
  (#ifdef'ed out) and a new one.  Got rid of the old one, which was
  abandoned years ago.

- In the characterize() function, part of dictionary comparison, use
  PyObject_RichCompareBool() to compare keys and values instead.  But
  continue to use PyObject_Compare() for comparing the final
  (deciding) elements.

- Align the comments in the type struct initializer.

Note: I don't implement rich comparison for dictionaries -- there
doesn't seem to be much to be gained.  (The existing comparison
already decides that shorter dicts are always smaller than longer
dicts.)
2001-01-18 00:39:02 +00:00
Guido van Rossum
f77bc62e73 Same treatment as listobject.c:
- tuplecontains(): call RichCompare(Py_EQ).

- Get rid of tuplecompare(), in favor of new tuplerichcompare() (a
  clone of list_compare()).

- Aligned the comments for large struct initializers.
2001-01-18 00:00:53 +00:00
Guido van Rossum
24f67d568c Fix a leak in instance_coerce(). This was introduced by Neil's
earlier coercion changes, not by rich comparisons.  When a coercion
function returns 1 (meaning it cannot do it), it should not INCREF the
arguments.  When no __coerce__() method was found, instance_coerce()
originally returned 0, pretending it did it.  Neil changed the return
value to 1, more accurately reflecting that it didn't do anything, but
forgot to take out the two INCREF calls.
2001-01-17 23:43:43 +00:00
Tim Peters
97c9640cc9 Windows: 2.1a1 changes so Python runs again. Note that the python20
subproject is gone, replaced by the new pythoncore subproject.
2001-01-17 23:23:13 +00:00
Andrew M. Kuchling
6425efe9ae The signal module has to be compiled statically, so add it to Setup.dist
and remove support for it from setup.py
2001-01-17 22:17:16 +00:00
Guido van Rossum
65e1cea6e3 Convert to rich comparisons:
- sort's docompare() calls RichCompare(Py_LT).

- list_contains(), list_index(), listcount(), listremove() call
  RichCompare(Py_EQ).

- Get rid of list_compare(), in favor of new list_richcompare().  The
  latter does some nice shortcuts, like when == or != is requested, it
  first compares the lengths for trivial accept/reject.  Then it goes
  over the items until it finds an index where the items differe; then
  it does more shortcut magic to minimize the number of additional
  comparisons.

- Aligned the comments for large struct initializers.
2001-01-17 22:11:59 +00:00
Neil Schemenauer
7d6457743a Bump up version number. 2001-01-17 21:59:33 +00:00
Neil Schemenauer
e7e2ece979 - compile struct module
- get version number from sys.version_info
2001-01-17 21:58:00 +00:00
Fredrik Lundh
f785042433 a bold attempt to fix things broken by MAL's verify patch: import
'verify' iff it's used by a test module...
2001-01-17 21:51:36 +00:00
Guido van Rossum
f27cc5bc74 Marc-Andre must not have run these tests -- they used verify() but
didn't import it.  Also got rid of some inconsistent spaces inside
parentheses in test_gzip.py.
2001-01-17 21:43:06 +00:00
Guido van Rossum
722642902e Get rid of the declaration for _PyCompareState_Key. 2001-01-17 21:28:08 +00:00
Guido van Rossum
44a6ff6cf4 Get rid of the initialization of _PyCompareState_Key. 2001-01-17 21:27:36 +00:00
Guido van Rossum
2ffbf6b112 Deal properly (?) with comparing recursive datastructures.
- Use the compare nesting level and in-progress dictionary properly in
  PyObject_RichCompare().

- Change the in-progress code to use static variables instead of
  globals (both the nesting level and the key for the thread dict were
  globals but have no reason to be globals; the key can even be a
  function-static variable in get_inprogress_dict()).

- Rewrote try_rich_to_3way_compare() to benefit from the similarity of
  the three cases, making it table-driven.

- In try_rich_to_3way_compare(), test for EQ before LT and GT.  This
  turns out essential when comparing recursive UserList instances;
  with the old code, these would recurse into rich comparison three
  times for each nesting level up to NESTING_LIMIT/2, making the total
  number of calls in the order of 3**(NESTING_LIMIT/2)!

NOTE: I'm not 100% comfortable with this.  It works for the standard
test suite (which compares a few trivial recursive data structures
only), but I'm not sure that the in-progress dictionary is used
properly by the rich comparison code.  Jeremy suggested that maybe the
operation should be included in the dict.  Currently I presume that
objects in the dict are equal unless proven otherwise, and I set the
outcome for the rich comparison accordingly: true for operators EQ,
LE, GE, and false for the other three.  But Jeremy seems to think that
there may be counter-examples where this doesn't do the right thing.
2001-01-17 21:27:02 +00:00
Andrew M. Kuchling
a99202a017 Fix for bug #129173, reported by Skip Montanaro:
Check for the two possible headers for Expat, expat.h and xmlparse.h,
   and only compile the pyexpat module if one of them is found.
2001-01-17 20:51:18 +00:00
Andrew M. Kuchling
33b4d50180 strop doesn't actually seem to be needed 2001-01-17 20:21:30 +00:00
Andrew M. Kuchling
4f9e9432a8 Use the extended library search path when looking for readline (simple
oversight in using self.compiler.library_dirs)
2001-01-17 20:20:44 +00:00
Ka-Ping Yee
7dfe6e3264 Restore lost AFMT_S16_NE entry. 2001-01-17 19:31:29 +00:00
Marc-André Lemburg
3661908a6a This patch removes all uses of "assert" in the regression test suite
and replaces them with a new API verify(). As a result the regression
suite will also perform its tests in optimization mode.

Written by Marc-Andre Lemburg. Copyright assigned to Guido van Rossum.
2001-01-17 19:11:13 +00:00
Tim Peters
8551dd6078 Stop creating an unbounded number of "Jack is my hero" files under Windows.
Not that Jack doesn't deserve them, but saying it so often cheapens the
sentiment.
2001-01-17 18:59:46 +00:00
Andrew M. Kuchling
3712d396ac Patch #102588 / PEP 229:
The final piece of this change...

   Strip down Setup.config.in and Setup.dist to the minimal sets required
       to get a working Python; setup.py will handle the rest
2001-01-17 18:55:13 +00:00
Andrew M. Kuchling
ba77fc8cf0 Patch #102588 / PEP 229:
The final piece of this change...

   Run setup.py to build shared modules and to install them.
2001-01-17 18:54:54 +00:00
Marc-André Lemburg
a544ea2354 Undoing the whitespace patches which sneaked into the earlier patch. 2001-01-17 18:04:31 +00:00
Marc-André Lemburg
ad7c98e264 This patch adds a new builtin unistr() which behaves like str()
except that it always returns Unicode objects.

A new C API PyObject_Unicode() is also provided.

This closes patch #101664.

Written by Marc-Andre Lemburg. Copyright assigned to Guido van Rossum.
2001-01-17 17:09:53 +00:00
Andrew M. Kuchling
d5c43065d5 Various clean-ups:
* Uncomment the xreadlines module
  * The Tcl/Tk detection code doesn't need to worry about pre-8.0 versions
  * Fix some debugging changes (not running ar, a commented-out line)
2001-01-17 15:59:25 +00:00
Guido van Rossum
f98eda01ab News item for rich comparisons.
(I'm going to check in some more uses of rich comparisons, but the
basic feature should be in place now.)
2001-01-17 15:54:45 +00:00
Guido van Rossum
53451b3fd1 Use rich comparisons in min and max. 2001-01-17 15:47:24 +00:00
Guido van Rossum
ac7be6888b Rich comparisons fall-out:
- Use PyObject_RichCompare*() where possible: when comparing
  keyword arguments, in _PyEval_SliceIndex(), and of course in
  cmp_outcome().

Unrelated stuff:

- Removed all trailing whitespace.

- Folded some long lines.
2001-01-17 15:42:30 +00:00
Guido van Rossum
f916e7aa62 Rich comparisons fall-out:
- Get rid of float_cmp().

- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.
2001-01-17 15:33:42 +00:00
Guido van Rossum
6fd867b04d Rich comparisons fall-out:
- Get rid of long_cmp().

- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.
2001-01-17 15:33:18 +00:00
Guido van Rossum
3968e4c0f5 Rich comparisons fall-out:
- Get rid of int_cmp().

- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.
2001-01-17 15:32:23 +00:00
Guido van Rossum
c31896960a Rich comparisons fall-out:
- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.

- Use PyObject_RichCompareBool() in PySequence_Contains().
2001-01-17 15:29:42 +00:00
Guido van Rossum
8998b4f691 Rich comparisons.
- Got rid of instance_cmp(); refactored instance_compare().

- Added instance_richcompare() which calls __lt__() etc.

Some unrelated stuff mixed in:

- Aligned comments in various large struct initializers.

- Better test to avoid recursion if __coerce__ returns self as the
  first argument (this is an unrelated fix by Neil Schemenauer!).

- Style nit: don't use Py_DECREF(Py_NotImplemented); use
  Py_DECREF(result) -- it just looks better. :-)
2001-01-17 15:28:20 +00:00
Andrew M. Kuchling
b226b0c078 Patch #102588 / PEP 229:
Tweak the configure script to build setup.cfg
2001-01-17 15:24:57 +00:00
Guido van Rossum
e797ec1cb8 Rich comparisons. Refactored internal routine do_cmp() and added APIs
PyObject_RichCompare() and PyObject_RichCompareBool().

XXX Note: the code that checks for deeply nested rich comparisons is
bogus -- it assumes the two objects are always identical, rather than
using the same logic as PyObject_Compare().  I'll fix that later.
2001-01-17 15:24:28 +00:00
Andrew M. Kuchling
00e0f21be8 [Patch #102588/PEP 229]:
Check in the setup.py script, and the setup.cfg.in file, which
   handle compiling and installing as many extension modules as possible
2001-01-17 15:23:23 +00:00
Guido van Rossum
c219d55bd0 Rich comparisons: ensure that LT == Py_LT, etc. 2001-01-17 15:21:09 +00:00
Guido van Rossum
5f284ce68e Introduction to rich comparisons:
- Removed the nb_add slot from the PyNumberMethods struct.

- Renamed Py_TPFLAGS_NEWSTYLENUMBER to Py_TPFLAGS_CHECKTYPES.

- Added typedef richcmpfunc.

- Added tp_richcompare slot to PyTypeObject (replacing spare tp_xxx7).

- Added APIs PyObject_RichCompare() and PyObject_RichCompareBool().

- Added rich comparison operators Py_LT through Py_GE.
2001-01-17 15:20:39 +00:00