Jeremy Hylton [Thu, 12 Apr 2001 21:04:43 +0000 (21:04 +0000)]
Use new _implicitNameOp() to generate name op code for list comprehensions.
Always emit a SET_LINENO 0 at the beginning of the module. The
builtin compiler does this, and it's much easier to compare bytecode
generated by the two compilers if they both do.
Move the SET_LINENO inside the FOR_LOOP block for list
comprehensions. Also for compat. with builtin compiler.
Fred Drake [Thu, 12 Apr 2001 20:26:49 +0000 (20:26 +0000)]
Added warning that FancyURLopener prompts the user on the terminal when
basic authentication is needed.
Added documentation for FancyURLopener.prompt_user_passwd(), explaining
that subclasses should provide more appropriate behavior for the hosting
environment.
Jeremy Hylton [Thu, 12 Apr 2001 20:21:39 +0000 (20:21 +0000)]
pyassem.py:
Fix annoying bugs in flow graph layout code. In some cases the
implicit control transfers weren't honored. In other cases,
JUMP_FORWARD instructions jumped backwards.
Remove unused arg from nextBlock().
pycodegen.py
Add optional force kwarg to set_lineno() that will emit a
SET_LINENO even if it is the same as the previous lineno.
Use explicit LOAD_FAST and STORE_FAST to access list comp implicit
variables. (The symbol table doesn't know about them.)
Tim Peters [Thu, 12 Apr 2001 18:38:48 +0000 (18:38 +0000)]
Bug 415514 reported that e.g.
"%#x" % 0
blew up, at heart because C sprintf supplies a base marker if and only if
the value is not 0. I then fixed that, by tolerating C's inconsistency
when it does %#x, and taking away that *Python* produced 0x0 when
formatting 0L (the "long" flavor of 0) under %#x itself. But after talking
with Guido, we agreed it would be better to supply 0x for the short int
case too, despite that it's inconsistent with C, because C is inconsistent
with itself and with Python's hex(0) (plus, while "%#x" % 0 didn't work
before, "%#x" % 0L *did*, and returned "0x0"). Similarly for %#X conversion.
Fred Drake [Thu, 12 Apr 2001 16:47:17 +0000 (16:47 +0000)]
Convert several \seetext references to \seerfc and \seetitle versions.
These format somewhat better and include more semantic information in the
source.
Properly qualify methods inherited from classes in other modules.
Fix so that docother() doesn't blow up.
Eliminate man() function since doc() and man() did nearly the same thing.
Various other code cleanup and refactoring to reduce duplication.
Simplify and rewrite freshimport() so modules are always up to date,
even within packages (where reload() doesn't work).
Add finalization callback to the server (so that if the server fails to
start for some reason, the main thread isn't left hanging).
Steve Purcell [Thu, 12 Apr 2001 09:05:01 +0000 (09:05 +0000)]
- New fail*() methods, and comprehensive set of assert*() synonyms
- TestCase.failureException defines the exception that indicates a test failure
- Docstrings for TestLoader class
- Added exc_info() hack back in
Tim Peters [Thu, 12 Apr 2001 00:35:51 +0000 (00:35 +0000)]
Fix for SF bug #415514: "%#x" % 0 caused assertion failure/abort.
http://sourceforge.net/tracker/index.php?func=detail&aid=415514&group_id=5470&atid=105470
For short ints, Python defers to the platform C library to figure out what
%#x should do. The code asserted that the platform C returned a string
beginning with "0x". However, that's not true when-- and only when --the
*value* being formatted is 0. Changed the code to live with C's inconsistency
here. In the meantime, the problem does not arise if you format a long 0 (0L)
instead. However, that's because the code *we* wrote to do %#x conversions on
longs produces a leading "0x" regardless of value. That's probably wrong too:
we should drop leading "0x", for consistency with C, when (& only when) formatting
0L. So I changed the long formatting code to do that too.
Tim Peters [Thu, 12 Apr 2001 00:24:41 +0000 (00:24 +0000)]
Reverting the "unixware7" patch: atan2(0, 1) should be 0, regardless of
platform. If it returns pi on the unixware7 platform, they have a bug in
their libm atan2.
Barry Warsaw [Wed, 11 Apr 2001 20:23:24 +0000 (20:23 +0000)]
Bumping to version 4.0 since we now support only XEmacs 21.1 and Emacs
20.7, although not all of the compatibility code for older Emacsen has
been removed. Specifically, the old "make sure we have a current
custom.el library" stuff is removed, as is the hack-around for an
NTEmacs 19.34.6 make-temp-name bug.
Updated much of the Commentary section in the initial comments.
Much more importantly, I've integrated Ken Manheimer's pdbtrack stuff,
which is way cool. When enabled (as by default), this turns on the
overlay arrow when pdb is entered, either in the shell buffer or in
the *Python* buffer. Specifically:
(py-mode-map): Added C-c C-d to toggle pdb tracking.
(py-pdbtrack-do-tracking-p): New user customizable variable to control
whether overlay arrow tracking is enabled or not. This variable is
buffer local and is turned on by default.
(py-pdbtrack-minor-mode-string): The string that's added to the minor
mode alist when actually doing pdb overlay arrow tracking. User
customizable.
(py-pdbtrack-toggle-stack-tracking, turn-on-pdbtrack,
turn-off-pdbtrack): New commands to control pdb tracking.
(py-pdbtrack-is-tracking-p): Helper variable used to control the
display of py-pdbtrack-minor-mode-string. Set to true when the
overlay arrow is enabled, and false when it's disabled.
(py-pdbtrack-stack-entry-regexp, py-pdbtrack-input-prompt,
py-pdbtrack-track-range): Inherited from pdbtrack.el and renamed.
(py-pdbtrack-overlay-arrow, py-pdbtrack-track-stack-file): New
functions which actually do the tracking.
(py-shell): Add py-pdbtrack-track-stack-file to
comint-output-filter-functions.
Finally, add py-pdbtrack-track-stack-file to
comint-output-filter-functions at the file level. This and the
py-shell addition should ensure that pdb tracking is installed
regardless of the order of operation.
Also, add py-pdbtrack-minor-mode-string to minor-mode-alist.
Barry Warsaw [Wed, 11 Apr 2001 20:12:33 +0000 (20:12 +0000)]
Added some additional documentation describing how BabylMailbox
actually works (it returns a message containing the visible headers,
not the original headers). Doc change approved by Fred; closes SF bug
#412230.
Jeremy Hylton [Wed, 11 Apr 2001 13:52:29 +0000 (13:52 +0000)]
Fix exception handling for non-PyFunction objects, SF bug 414743.
Fix based on patch #414750 by Michael Hudson.
New functions get_func_name() and get_func_desc() return reasonable
names and descriptions for all objects. XXX Even objects that aren't
actually callable.
Fred Drake [Wed, 11 Apr 2001 04:38:34 +0000 (04:38 +0000)]
Based on a comment by Konrad Hinsen on python-list:
Change "EOF" to "end-of-file", on the premise that it is easier for
new programmers to understand (at least a little).
This does not attempt to explain "file or device attached to standard
input."
Include py_curses.h *after* defining _XOPEN_SOURCE_EXTENDED.
Michael Hudson suggested this fox for the Tru64 problem (SF bug
232597). It looks reasonable, it works on Tru64, and it doesn't beak
anything on Linux, so I say go for it.
Fred Drake [Tue, 10 Apr 2001 15:53:06 +0000 (15:53 +0000)]
Import the alltt package and wrap that environment in a similar way to
the way we handle verbatim, so that it picks up the same indentation and
minipage behavior.
When doing the quick test to see whether large files are supported,
catch IOError as well as OverflowError. I found that on Tru64 Unix
this was raised; probably because the OS (or libc) doesn't support
large files but the architecture is 64 bits!
When zlib can't be imported, zipfile raises RuntimeError, which causes
the test to be marked as failing rather than skipped. Add an explicit
"import zlib" to prevent this.
Fix synopsis() so it can handle binary module files.
Avoid ever using popen on Windows, since it's broken there.
Factor out the business of getting the summary line into splitdoc().
Use the modulename() routine in inspect.
Show all members of modules and classes rather than filtering on leading '_'.
Small typo and formtating fixes.
Don't show warnings when running "pydoc -k".
Tim Peters [Tue, 10 Apr 2001 05:02:52 +0000 (05:02 +0000)]
test_pickle works on sizeof(long)==8 boxes again.
pickle.py
The code implicitly assumed that all ints fit in 4 bytes, causing all
sorts of mischief (from nonsense results to corrupted pickles).
Repaired that.
marshal.c
The int marshaling code assumed that right shifts of signed longs
sign-extend. Repaired that.
Tim Peters [Tue, 10 Apr 2001 04:35:28 +0000 (04:35 +0000)]
Ack -- this module mixes tabs and spaces, and what appears to be a mix
of 2-space and 4-space indents. Whatever, when I saw the checkin diff it
was clear that what my editor thinks a tab means didn't match this module's
belief. Removed all the tabs from the lines I added and changed, left
everything else alone.
Tim Peters [Tue, 10 Apr 2001 04:22:00 +0000 (04:22 +0000)]
On a sizeof(long)==8 machine, ints in range(2**31, 2**32) were getting
pickled into the signed(!) 4-byte BININT format, so were getting unpickled
again as negative ints. Repaired that.
Added some minimal docs at the top about what I've learned about the pickle
format codes (little of which was obvious from staring at the code,
although that's partly because all the size-related bugs greatly obscured
the true intent of the code).
Happy side effect: because save_int() needed to grow a *proper* range
check in order to fix this bug, it can now use the more-efficient BININT1,
BININT2 and BININT formats when the long's value is small enough to fit
in a signed 4-byte int (before this, on a sizeof(long)==8 box it always
used the general INT format for negative ints).
test_cpickle works again on sizeof(long)==8 machines. test_pickle is
still busted big-time.
Tim Peters [Tue, 10 Apr 2001 03:41:41 +0000 (03:41 +0000)]
Test full range of native ints. This exposes two more binary pickle
bugs on sizeof(long)==8 machines. pickle.py has no idea what it's
doing with very large ints, and variously gets things right by accident,
computes nonsense, or generates corrupt pickles. cPickle fails on
cases 2**31 <= i < 2**32: since it *thinks* those are 4-byte ints
(the "high 4 bytes" are all zeroes), it stores them in the (signed!) BININT
format, so they get unpickled as negative values.
Append the revision number for each file to the output.
(Yes, this is a new feature right before the 2.1 release. No, I can't
imagine this would seriously break anybody's code. In fact, most
users of this script are probably *happy* to see this addition.)
Tim Peters [Tue, 10 Apr 2001 01:54:42 +0000 (01:54 +0000)]
Critical fix: if cPickle on a sizeof(long)==8 box is used to read a
binary pickle, and the latter contains a pickle of a negative Python
int i written on a sizeof(long)==4 box (and whether by cPickle or
pickle.py), it's read incorrectly as i + 2**32. The patch repairs that,
and allows test_cpickle.py (to which I added a relevant test case earlier
today) to work again on sizeof(long)==8 boxes.
There's another (at least one) sizeof(long)==8 binary pickle bug, but in
pickle.py instead. That bug is still there, and test_pickle.py doesn't
catch it yet (try pickling and unpickling, e.g., 1 << 46).
Make on Alpha Tru64 5.1 (as installed on the SF compile farm) doesn't
think that a command starting with '#' is a comment, so move the one
comment in such a position (in the rule for building $(LIBRARY)) to a
harmless position.