Fred Drake [Wed, 21 Aug 2002 19:24:21 +0000 (19:24 +0000)]
Clarify that even though some of the relevant specifications define the
order in which form variables should be encoded in a request, a CGI script
should not rely on that since a client may not conform to those specs, or
they may not be relevant to the request.
Closes SF bug #596866.
Now that __init__ transforms set elements, we know that all of the
elements are hashable, so we can use dict.update() or dict.copy()
for a C speed Set.copy().
Guido van Rossum [Wed, 21 Aug 2002 03:20:44 +0000 (03:20 +0000)]
Ouch. The test suite *really* needs work!!!!! There were several
superficial errors and one deep one that aren't currently caught. I'm
headed for bed after this checkin.
- Fixed several typos introduced by Raymond Hettinger (through
cut-n-paste from my template): it's _as_temporarily_immutable, not
_as_temporary_immutable, and moreover when the element is added, we
should use _as_immutable.
- Made the seq argument to ImmutableSet.__init__ optional, so we can
write ImmutableSet() to create an immutable empty set.
- Rename the seq argument to Set and ImmutableSet to iterable.
- Add a Set.__hash__ method that raises a TypeError. We inherit a
default __hash__ implementation from object, and we don't want that.
We can then catch this in update(), so that
e.g. s.update([Set([1])]) will transform the Set([1]) to
ImmutableSet([1]).
- Added the dance to catch TypeError and try _as_immutable in the
constructors too (by calling _update()). This is needed so that
Set([Set([1])]) is correctly interpreted as
Set([ImmutableSet([1])]). (I was puzzled by a side effect of this
and the inherited __hash__ when comparing two sets of sets while
testing different powerset implementations: the Set element passed
to a Set constructor wasn't transformed to an ImmutableSet, and then
the dictionary didn't believe the Set found in one dict it was the
same as ImmutableSet in the other, because the hashes were
different.)
- Refactored Set.update() and both __init__() methods; moved the body
of update() into BaseSet as _update(), and call this from __init__()
and update().
- Changed the NotImplementedError in BaseSet.__init__ to TypeError,
both for consistency with basestring() and because we have to use
TypeError when denying Set.__hash__. Together those provide
sufficient evidence that an unimplemented method needs to raise
TypeError.
Guido van Rossum [Tue, 20 Aug 2002 21:38:37 +0000 (21:38 +0000)]
Move __init__ from BaseSet into Set and ImmutableSet. This causes a
tiny amount of code duplication, but makes it possible to give BaseSet
an __init__ that raises an exception.
Tim Peters [Tue, 20 Aug 2002 19:00:22 +0000 (19:00 +0000)]
long_format(), long_lshift(): Someone on c.l.py is trying to boost
SHIFT and MASK, and widen digit. One problem is that code of the form
digit << small_integer
implicitly assumes that the result fits in an int or unsigned int
(platform-dependent, but "int sized" in any case), since digit is
promoted "just" to int or unsigned via the usual integer promotions.
But if digit is typedef'ed as unsigned int, this loses information.
The cure for this is just to cast digit to twodigits first.
Guido van Rossum [Tue, 20 Aug 2002 17:29:29 +0000 (17:29 +0000)]
Fix some endcase bugs in unicode rfind()/rindex() and endswith().
These were reported and fixed by Inyeol Lee in SF bug 595350. The
endswith() bug was already fixed in 2.3, but this adds some more test
cases.
Barry Warsaw [Tue, 20 Aug 2002 14:50:09 +0000 (14:50 +0000)]
get_content_type(), get_content_maintype(), get_content_subtype(): RFC
2045, section 5.2 states that if the Content-Type: header is
syntactically invalid, the default type should be text/plain.
Implement minimal sanity checking of the header -- it must have
exactly one slash in it. This closes SF patch #597593 by Skip, but in
a different way.
Note that these methods used to raise ValueError for invalid ctypes,
but now they won't.
Barry Warsaw [Tue, 20 Aug 2002 14:47:30 +0000 (14:47 +0000)]
_dispatch(): Use get_content_maintype() and get_content_subtype() to
get the MIME main and sub types, instead of getting the whole ctype
and splitting it here. The two more specific methods now correctly
implement RFC 2045, section 5.2.
Create two subsections of the "Core Language Changes" section, because
the list is getting awfully long
Mention Karatsuba multiplication and some other items
Guido van Rossum [Mon, 19 Aug 2002 21:43:18 +0000 (21:43 +0000)]
SF patch 576101, by Oren Tirosh: alternative implementation of
interning. I modified Oren's patch significantly, but the basic idea
and most of the implementation is unchanged. Interned strings created
with PyString_InternInPlace() are now mortal, and you must keep a
reference to the resulting string around; use the new function
PyString_InternImmortal() to create immortal interned strings.
Guido van Rossum [Mon, 19 Aug 2002 20:24:07 +0000 (20:24 +0000)]
Another ugly inlining hack, expanding the two PyDict_GetItem() calls
in LOAD_GLOBAL. Besides saving a C function call, it saves checks
whether f_globals and f_builtins are dicts, and extracting and testing
the string object's hash code is done only once. We bail out of the
inlining if the name is not exactly a string, or when its hash is -1;
because of interning, neither should ever happen. I believe interning
guarantees that the hash code is set, and I believe that the 'names'
tuple of a code object always contains interned strings, but I'm not
assuming that -- I'm simply testing hash != -1.
On my home machine, this makes a pystone variant with new-style
classes and slots run at the same speed as classic pystone! (With
new-style classes but without slots, it is still a lot slower.)
Guido van Rossum [Mon, 19 Aug 2002 19:26:42 +0000 (19:26 +0000)]
Call me anal, but there was a particular phrase that was speading to
comments everywhere that bugged me: /* Foo is inlined */ instead of
/* Inline Foo */. Somehow the "is inlined" phrase always confused me
for half a second (thinking, "No it isn't" until I added the missing
"here"). The new phrase is hopefully unambiguous.
Guido van Rossum [Mon, 19 Aug 2002 16:02:33 +0000 (16:02 +0000)]
Simple but important optimization for descr_check(): instead of the
expensive and overly general PyObject_IsInstance(), call
PyObject_TypeCheck() which is a macro that often avoids a call, and if
it does make a call, calls the much more efficient PyType_IsSubtype().
This saved 6% on a benchmark for slot lookups.
Tim Peters [Mon, 19 Aug 2002 00:42:29 +0000 (00:42 +0000)]
SF bug 595919: popenN return only text mode pipes
popen2() and popen3() created text-mode pipes even when binary mode
was asked for. This was specific to Windows.
Jack Jansen [Sun, 18 Aug 2002 21:57:09 +0000 (21:57 +0000)]
Refuse to run if the last bit of the destination path contains a # character.
This is a silly workaround for a rather serious bug in MacOSX: if you take
a long filename and convert it to an FSSpec the fsspec gets a magic
cooky (containing a #, indeed). If you then massage the extension of this
fsspec and convert back to a pathname you may end up referring to the
same file. This could destroy your sourcefile. The problem only occcurs
in MacPython-OS9, not MacPython-OSX (I think).
Modify splituser() method to allow an @ in the userinfo field.
Jeremy reported that this is not allowed by RFC 2396; however,
other tools support unescaped @'s so we should also.
Andrew MacIntyre [Sun, 18 Aug 2002 06:31:01 +0000 (06:31 +0000)]
Prep for 2.3:
- update DLL version number
- add files required for 2.3 (no changes to modules though)
- restructure build of pgen.exe
NOTE: As I don't have the VACPP compiler, these changes are untested.
Apart from slightly re-ordering some file lists, and matching file name
casing, I believe these changes are the minimum necessary to build 2.3
with VACPP.
Andrew MacIntyre [Sun, 18 Aug 2002 06:26:33 +0000 (06:26 +0000)]
Build process updates:
- the security fixes to tempfile have lead to test_tempfile wanting
to create 100 temporary files. as the EMX default is only 40,
the number of file handles has been bumped (up to 250).
- changes to pgen have required restructuring its build support.
Guido van Rossum [Sat, 17 Aug 2002 14:50:24 +0000 (14:50 +0000)]
Get rid of _once(); inlining it takes less code. :-)
Also, don't call gettempdir() in the default expression for the 'dir'
argument to various functions; use 'dir=None' for the default and
insert 'if dir is None: dir = gettemptir()' in the bodies. That way
the work done by gettempdir is postponed until needed.
Jeremy Hylton [Fri, 16 Aug 2002 17:47:26 +0000 (17:47 +0000)]
Move body of CALL_FUNCTION opcode into helper function.
This makes the code much easier to ready, because it is at a sane
indentation level. On my box this shows a 1-2% speedup, which means
nothing, except that I'm not going to worry about the performance
effects of the change.
Guido van Rossum [Fri, 16 Aug 2002 17:01:09 +0000 (17:01 +0000)]
Squash a few calls to the hideously expensive PyObject_CallObject(o,a)
-- replace then with slightly faster PyObject_Call(o,a,NULL). (The
difference is that the latter requires a to be a tuple; the former
allows other values and wraps them in a tuple if necessary; it
involves two more levels of C function calls to accomplish all that.)
Guido van Rossum [Fri, 16 Aug 2002 16:14:00 +0000 (16:14 +0000)]
Streamline the fast track for CFunction calls a bit more: there was
nothing special done if keyword arguments were present, so test for
that earlier and fall through to the normal case if there are any.
This ought to slow down CFunction calls with keyword args, but I don't
care; it's a tiny (1%) improvement for pystone.
Tim Peters [Fri, 16 Aug 2002 03:41:39 +0000 (03:41 +0000)]
SF bug 594996: OverflowError in random.randrange
Loosened the acceptable 'start' and 'stop' arguments so that any
Python (bounded) ints can be used. So, e.g., randrange(-sys.maxint-1,
sys.maxint) no longer blows up.
Guido van Rossum [Fri, 16 Aug 2002 02:48:11 +0000 (02:48 +0000)]
Add warnings for arguments named None. All set. (I could add a
warning for 'global None', but that's either accompanied by an
assignment to None, which will trigger a warning, or not, in which
case it's harmless. :-)
Tim Peters [Fri, 16 Aug 2002 02:27:15 +0000 (02:27 +0000)]
check_events(): This was failing under -O, due to not expecting any
LINE events when not __debug__. But we get them anyway under -O now,
so just stop special-casing non-__debug__ mode.
Guido van Rossum [Fri, 16 Aug 2002 02:13:49 +0000 (02:13 +0000)]
Add warnings for assignment or deletion of variables and attributes
named 'None'. Still to do: function definition parameter lists, and
function call keyword arguments.
Guido van Rossum [Fri, 16 Aug 2002 01:57:32 +0000 (01:57 +0000)]
Minor cleanup of parsename() and parsestr(): the 'struct compiling *'
argument should be called 'c', like everywhere else. Renamed a
complex variable 'c' to 'z' and moved it inside the only scope where
it's used.
Barry Warsaw [Thu, 15 Aug 2002 22:14:24 +0000 (22:14 +0000)]
base64.decodestring('') should return '' instead of raising an
exception. The bug fix for SF #430849 wasn't quite right. This
closes SF bug #595671. I'll backport this to Python 2.2.
Jack Jansen [Thu, 15 Aug 2002 22:05:58 +0000 (22:05 +0000)]
Fixed the bugs in the constant definitions, and in the code to test
them.
The FutureWarnings are still there, until a way has been found to
say "I know what I'm doing here when I say 0xff000000".
Jack Jansen [Thu, 15 Aug 2002 21:31:18 +0000 (21:31 +0000)]
Try to cater for a source tree checked out with MacCVS in stead of
unix cvs. In this case the resource files are actual resource files
in stead of AppleSingle encoded files.
Tim Peters [Thu, 15 Aug 2002 20:06:00 +0000 (20:06 +0000)]
k_mul() comments: In honor of Dijkstra, made the proof that "t3 fits"
rigorous instead of hoping for testing not to turn up counterexamples.
Call me heretical, but despite that I'm wholly confident in the proof,
and have done it two different ways now, I still put more faith in
testing ...
Tim Peters [Thu, 15 Aug 2002 19:41:06 +0000 (19:41 +0000)]
long_mul(): Simplified exit code. In particular, k_mul() returns a
normalized result, so no point to normalizing it again. The number
of test+branches was also excessive.
Skip Montanaro [Thu, 15 Aug 2002 01:34:38 +0000 (01:34 +0000)]
Slight reordering of directories searched for BerkDB libs and include files.
Push /usr/... further down the list - always check /usr/local/... before
/usr/...
Doubt this will help with http://python.org/sf/589427 or not, but these
changes were prompted by my investigation of that bug report. I wasn't able
to reproduce that problem though
Fred Drake [Wed, 14 Aug 2002 20:59:38 +0000 (20:59 +0000)]
Py_InitModule() and friends now accept NULL for the 'methods'
argument. This makes sense now that extension types can support
__init__ directly rather than requiring function constructors.
Fred Drake [Wed, 14 Aug 2002 20:57:56 +0000 (20:57 +0000)]
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
sense now that extension types can support __init__ directly rather
than requiring function constructors.