The new execvpe code would sometimes do the wrong thing when a
non-executable file existed earlier in the path and an executable file
of the same name existed later in the path. This patch restores the
proper behavior (which is to execute the second file). When only a
non-executable file exists, the correct error is still reported.
Walter Dörwald [Tue, 3 Sep 2002 13:53:40 +0000 (13:53 +0000)]
Check whether a string resize is necessary at the end
of PyString_DecodeEscape(). This prevents a call to
_PyString_Resize() for the empty string, which would
result in a PyErr_BadInternalCall(), because the
empty string has more than one reference.
This closes SF bug http://www.python.org/sf/603937
Fred Drake [Mon, 2 Sep 2002 15:54:06 +0000 (15:54 +0000)]
Minor change for symmetry with PyXML: PyDoc_STR should not include
the "safety" parentheses since some older compilers refuse to compile
the module then, claiming that static initializers are non-constant.
This doesn't actually make any difference for Python, since these
definitions are not used when compiling with a version of Python that
already defines the PyDoc_* macros.
Guido van Rossum [Sat, 31 Aug 2002 15:16:14 +0000 (15:16 +0000)]
Because MWH changed the bytecode again, moved the magic number *back*
to 62011. This should get the snake-farm to throw away its old .pyc
files, amongst others.
Jack Jansen [Sat, 31 Aug 2002 01:25:17 +0000 (01:25 +0000)]
Implemented the Help menu. The Python manual can be viewed (if installed)
and the selection can be looked up, and so can the Carbon manual. From the
help menu you can also get to the online documentation, the Python website
and the MacPython page.
Further SET_LINENO reomval fixes. See comments in patch #587933.
Use a slightly different strategy to determine when not to call the line
trace function. This removes the need for the RETURN_NONE opcode, so
that's gone again. Update docs and comments to match.
Thanks to Neal and Armin!
Also add a test suite. This should have come with the original patch...
Jack Jansen [Fri, 30 Aug 2002 12:56:08 +0000 (12:56 +0000)]
On Jaguar the default mode for files in the installed product is 444 (or 555)
in stead of 644 (755). This makes a subsequent install fail. Changed
the INSTALL_MODE_FLAG to fix this.
Jack Jansen [Thu, 29 Aug 2002 21:09:00 +0000 (21:09 +0000)]
Revived the Carbon.Help module, but implementing the MacHelp API in stead
of the defunct Balloons API. Help tags are TBD, but at least this gives
us access to the help menu.
Barry Warsaw [Thu, 29 Aug 2002 15:29:49 +0000 (15:29 +0000)]
strptime(): The code that was adding 12 to PM hours was incorrect
because it added it to 12 PM too. 12 PM should be hour 12 not hour
24.
Also cleaned up a minor style nit. There are more style problems in
this file that I'll clean up next (but I didn't want them to overwhelm
the substance of this fix).
Barry Warsaw [Thu, 29 Aug 2002 15:25:04 +0000 (15:25 +0000)]
The test I saw failing this morning just happened to be run at 8am
localtime, which in -0400 is 12 noon GMT. The bug boiled down to
broken conversion of 12 PM to hour 12 for the '%I %p' format string.
Added a test for this specific condition: Strptime12AMPMTests. Fix to
_strptime.py coming momentarily.
Guido van Rossum [Thu, 29 Aug 2002 15:10:30 +0000 (15:10 +0000)]
Undo Barry's change. This file is not imported, it's fed as input to
the tokenize module by test_tokenize.py. The FutureWarnings only
appeared during installation, and I've figured out a way to suppress
those in a different way.
Barry Warsaw [Thu, 29 Aug 2002 13:09:47 +0000 (13:09 +0000)]
Fixed three exceptions in the Plain integers test, although I'm not
sure these are the best fixes.
- Test maxint-1 against the negative octal constant -020000000000
- Comment out the tests for oct -1 and hex -1, since 037777777777 and
0xffffffff raise FutureWarnings now and in Python 2.4 those
constants will produce positive values, not negative values. So the
existing test seems to test something that won't be true in 2.4.
Jack Jansen [Wed, 28 Aug 2002 22:22:10 +0000 (22:22 +0000)]
Distutils-based script by Bill Fancher to download the Python documentation
HTML tarball and use it to create a documentation tree readable and
searchable with Apple Help Viewer. The documentation also shows up in
Project Builder (if you add Python.framework to your project).
Jack Jansen [Wed, 28 Aug 2002 21:27:02 +0000 (21:27 +0000)]
- Install a symlink to the documentation (which lives in the framework)
in Python.app, and refer to it in Info.plist. This makes Apple Help
Viewer recognize the Python documentation.
- Changed the externally visible name of Python.app to "Python" (was PythonW).
Jack Jansen [Wed, 28 Aug 2002 21:23:53 +0000 (21:23 +0000)]
Distutils-based script by Bill Fancher to download the Python documentation
HTML tarball and use it to create a documentation tree readable and
searchable with Apple Help Viewer. The documentation also shows up in
Project Builder (if you add Python.framework to your project).
Tim Peters [Sun, 25 Aug 2002 18:43:10 +0000 (18:43 +0000)]
Implemented <, <=, >, >= for sets, giving subset and proper-subset
meanings. I did not add new, e.g., ispropersubset() methods; we're
going nuts on those, and, e.g., there was no "friendly name" for
== either.
Kurt B. Kaiser [Sun, 25 Aug 2002 14:08:07 +0000 (14:08 +0000)]
1. Revert subprocess environment clearing, will restart subprocess
instead.
2. Preserve the Idle client's listening socket for reuse with the
fresh subprocess.
3. Remove some unused rpc code, comment out additional unused code.
Removed < <= > >= from the API. Implemented as comparisons of the
underlying dictionaries, there were no reasonable use cases (lexicographic
sorting of a list of sets is somewhat esoteric). Frees the operators
for other uses (such as strict subset and superset comparisons).
Guido van Rossum [Sat, 24 Aug 2002 06:57:49 +0000 (06:57 +0000)]
string_contains(): speed up by avoiding function calls where
possible. This always called PyUnicode_Check() and PyString_Check(),
at least one of which would call PyType_IsSubtype(). Also, this would
call PyString_Size() on known string objects.
At Tim Peter's suggestion, propagated GvR's binary operator changes to
the inplace operators. The strategy is to have the operator overloading
code do the work and then to define equivalent method calls which rely on
the operators. The changes facilitate proper application of TypeError
and NonImplementedErrors.
Added corresponding tests to the test suite to make sure both the operator
and method call versions get exercised.
Since instances of _TemporarilyImmutableSet are always thrown away
immediately after the comparison, there in no use in caching the hashcode.
The test, 'if self._hashcode is None', never fails. Removing the caching
saves a few lines and a little time.
1. Removed module self test in favor of unittests -- Timbot's suggestion.
2. Replaced calls to Set([]) with Set() -- Timbot's suggestion
3. Fixed subtle bug in sets of sets:
The following code did not work (will add to test suite):
d = Set('d')
s = Set([d]) # Stores inner set as an ImmutableSet
s.remove(d) # For comparison, wraps d in _TemporarilyImmutableSet
The comparison proceeds by computing the hash of the
_TemporarilyImmutableSet and finding it in the dictionary.
It then verifies equality by calling ImmutableSet.__eq__()
and crashes from the binary sanity check.
The problem is that the code assumed equality would be checked
with _TemporarilyImmutableSet.__eq__().
The solution is to let _TemporarilyImmutableSet derive from BaseSet
so it will pass the sanity check and then to provide it with the
._data element from the wrapped set so that ImmutableSet.__eq__()
will find ._data where it expects.
Since ._data is now provided and because BaseSet is the base class,
_TemporarilyImmutableSet no longer needs .__eq__() or .__ne__().
Note that inheriting all of BaseSet's methods is harmless because
none of those methods (except ones starting with an underscore)
can mutate the .data element. Also _TemporarilyImmutableSet is only
used internally as is not otherwise visible.
Guido van Rossum [Fri, 23 Aug 2002 18:50:21 +0000 (18:50 +0000)]
Fix SF bug 599128, submitted by Inyeol Lee: .replace() would do the
wrong thing for a unicode subclass when there were zero string
replacements. The example given in the SF bug report was only one way
to trigger this; replacing a string of length >= 2 that's not found is
another. The code would actually write outside allocated memory if
replacement string was longer than the search string.
(I wonder how many more of these are lurking? The unicode code base
is full of wonders.)
Bugfix candidate; this same bug is present in 2.2.1.
Guido van Rossum [Fri, 23 Aug 2002 18:21:28 +0000 (18:21 +0000)]
Code by Inyeol Lee, submitted to SF bug 595350, to implement
the string/unicode method .replace() with a zero-lengt first argument.
Inyeol contributed tests for this too.