- 26 Eki, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
and functions: we only need to call PyObject_ClearWeakRefs() if the weakref list is non-NULL. Since these objects are common but weakrefs are still unusual, saving the call at deallocation time makes a lot of sense.
-
- 22 Eki, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
There really isn't a good reason for instance method objects to have their own __dict__, __doc__ and __name__ properties that just delegate the request to the function (callable); the default attribute behavior already does this. The test suite had to be fixed because the error changes from TypeError to AttributeError.
-
- 17 Eki, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
PyType_HasFeature(t, Py_TPFLAGS_HAVE_CLASS).
-
- 30 Eyl, 2001 1 kayıt (commit)
-
-
Tim Peters yazdı
Replaced 3 instances of "iter() of non-sequence" with "iteration over non-sequence". Restored "unpack non-sequence" for stuff like "a, b = 1".
-
- 20 Eyl, 2001 2 kayıt (commit)
-
-
Guido van Rossum yazdı
no backwards compatibility to worry about, so I just pushed the 'closure' struct member to the back -- it's never used in the current code base (I may eliminate it, but that's more work because the getter and setter signatures would have to change.) As examples, I added actual docstrings to the getset attributes of a few types: file.closed, xxsubtype.spamdict.state.
-
Guido van Rossum yazdı
compatibility, this required all places where an array of "struct memberlist" structures was declared that is referenced from a type's tp_members slot to change the type of the structure to PyMemberDef; "struct memberlist" is now only used by old code that still calls PyMember_Get/Set. The code in PyObject_GenericGetAttr/SetAttr now calls the new APIs PyMember_GetOne/SetOne, which take a PyMemberDef argument. As examples, I added actual docstrings to the attributes of a few types: file, complex, instance method, super, and xxsubtype.spamlist. Also converted the symtable to new style getattr.
-
- 18 Eyl, 2001 2 kayıt (commit)
-
-
Martin v. Löwis yazdı
-
Guido van Rossum yazdı
descriptors for each attribute. The getattr() implementation is similar to PyObject_GenericGetAttr(), but delegates to im_self instead of looking in __dict__; I couldn't do this as a wrapper around PyObject_GenericGetAttr(). XXX A problem here is that this is a case of *delegation*. dir() doesn't see exactly the same attributes that are actually defined; e.g. if the delegate is a Python function object, it supports attributes like func_code etc., but these are not visible to dir(); on the other hand, dynamic function attributes (stored in the function's __dict__) *are* visible to dir(). Maybe we need a mechanism to tell dir() about the delegation mechanism? I vaguely recall seeing a request in the newsgroup for a more formal definition of attribute delegation too. Sigh, time for a new PEP.
-
- 08 Eyl, 2001 1 kayıt (commit)
-
-
Tim Peters yazdı
iterable object. I'm not sure how that got overlooked before! Got rid of the internal _PySequence_IterContains, introduced a new internal _PySequence_IterSearch, and rewrote all the iteration-based "count of", "index of", and "is the object in it or not?" routines to just call the new function. I suppose it's slower this way, but the code duplication was getting depressing.
-
- 07 Eyl, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
the base classes is not a classic class, and its class (the metaclass) is callable, call the metaclass to do the deed. One effect of this is that, when mixing classic and new-style classes amongst the bases of a class, it doesn't matter whether the first base class is a classic class or not: you will always get the error "TypeError: metatype conflict among bases". (Formerly, with a classic class first, you'd get "TypeError: PyClass_New: base must be a class".) Another effect is that multiple inheritance from ExtensionClass.Base, with a classic class as the first class, transfers control to the ExtensionClass.Base class. This is what we need for SF #443239 (and also for running Zope under 2.2a4, before ExtensionClass is replaced).
-
- 05 Eyl, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
While not even documented, they were clearly part of the C API, there's no great difficulty to support them, and it has the cool effect of not requiring any changes to ExtensionClass.c.
-
- 29 Agu, 2001 1 kayıt (commit)
-
-
Neil Schemenauer yazdı
-
- 24 Agu, 2001 2 kayıt (commit)
-
-
Guido van Rossum yazdı
an inappropriate first argument. Now that there are more ways for this to fail, make sure to report the name of the class of the expected instance and of the actual instance.
-
Barry Warsaw yazdı
into a hardcoded char* buffer. Closes patch #454743.
-
- 17 Agu, 2001 3 kayıt (commit)
-
-
Guido van Rossum yazdı
-
Guido van Rossum yazdı
streamlined a bit. instancemethod_descr_get(): don't bind an unbound method of a class that's not a base class of the argument class.
-
Guido van Rossum yazdı
-
- 16 Agu, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
assigned to a class variable and then accessed via an instance, it should not be rebound. test_descr.py:methods(): test for the condition above.
-
- 15 Agu, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
binding of unbound methods.
-
- 08 Agu, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
This introduces: - A new operator // that means floor division (the kind of division where 1/2 is 0). - The "future division" statement ("from __future__ import division) which changes the meaning of the / operator to implement "true division" (where 1/2 is 0.5). - New overloadable operators __truediv__ and __floordiv__. - New slots in the PyNumberMethods struct for true and floor division, new abstract APIs for them, new opcodes, and so on. I emphasize that without the future division statement, the semantics of / will remain unchanged until Python 3.0. Not yet implemented are warnings (default off) when / is used with int or long arguments. This has been on display since 7/31 as SF patch #443474. Flames to /dev/null.
-
- 02 Agu, 2001 2 kayıt (commit)
-
-
Tim Peters yazdı
(which didn't actually exist!) incorrectly.
-
Tim Peters yazdı
-
- 22 May, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
prototype, for gcc -Wstrict-prototypes.
-
- 11 May, 2001 1 kayıt (commit)
-
-
Jeremy Hylton yazdı
For rich comparisons, use instance_getattr2() when possible to avoid the expense of setting an AttributeError. Also intern the name_op[] table and use the interned strings rather than creating a new string and interning it each time through.
-
- 05 May, 2001 1 kayıt (commit)
-
-
Tim Peters yazdı
safely together and don't duplicate logic (the common logic was factored out into new private API function _PySequence_IterContains()). Visible change: some_complex_number in some_instance no longer blows up if some_instance has __getitem__ but neither __contains__ nor __iter__. test_iter changed to ensure that remains true.
-
- 03 May, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
need to be specified in the type structures independently. The flag exists only for binary compatibility. This is a "source cleanliness" issue and introduces no behavioral changes.
-
- 30 Nis, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
printing of instances not to look for __str__(). Fix this.
-
- 23 Nis, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
sees it (test_iter.py is unchanged). - Added a tp_iternext slot, which calls the iterator's next() method; this is much faster for built-in iterators over built-in types such as lists and dicts, speeding up pybench's ForLoop with about 25% compared to Python 2.1. (Now there's a good argument for iterators. ;-) - Renamed the built-in sequence iterator SeqIter, affecting the C API functions for it. (This frees up the PyIter prefix for generic iterator operations.) - Added PyIter_Check(obj), which checks that obj's type has a tp_iternext slot and that the proper feature flag is set. - Added PyIter_Next(obj) which calls the tp_iternext slot. It has a somewhat complex return condition due to the need for speed: when it returns NULL, it may not have set an exception condition, meaning the iterator is exhausted; when the exception StopIteration is set (or a derived exception class), it means the same thing; any other exception means some other error occurred.
-
- 20 Nis, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
new slot tp_iter in type object, plus new flag Py_TPFLAGS_HAVE_ITER new C API PyObject_GetIter(), calls tp_iter new builtin iter(), with two forms: iter(obj), and iter(function, sentinel) new internal object types iterobject and calliterobject new exception StopIteration new opcodes for "for" loops, GET_ITER and FOR_ITER (also supported by dis.py) new magic number for .pyc files new special method for instances: __iter__() returns an iterator iteration over dictionaries: "for x in dict" iterates over the keys iteration over files: "for x in file" iterates over lines TODO: documentation test suite decide whether to use a different way to spell iter(function, sentinal) decide whether "for key in dict" is a good idea use iterators in map/filter/reduce, min/max, and elsewhere (in/not in?) speed tuning (make next() a slot tp_next???)
-
- 23 Mar, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
-
- 22 Mar, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
must now initialize the extra field used by the weak-ref machinery to NULL themselves, to avoid having to require PyObject_INIT() to check if the type supports weak references and do it there. This causes less work to be done for all objects (the type object does not need to be consulted to check for the Py_TPFLAGS_HAVE_WEAKREFS bit).
-
- 26 Şub, 2001 2 kayıt (commit)
-
-
Fred Drake yazdı
so make it void.
-
Barry Warsaw yazdı
set a function attribute on a method (either bound or unbound). This reverts to Python 2.0 behavior that no attributes of the method are writable, but provides a more informative error message.
-
- 01 Şub, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
-
- 29 Ock, 2001 2 kayıt (commit)
-
-
Guido van Rossum yazdı
typedef, and at least one compiler choked on this. (SF patch #103457, by bquinlan)
-
Jeremy Hylton yazdı
-
- 28 Ock, 2001 1 kayıt (commit)
-
-
Fred Drake yazdı
-
- 18 Ock, 2001 1 kayıt (commit)
-
-
Guido van Rossum yazdı
__cmp__ and __eq__ absent before deciding to do a quickie based on the object address. (Tim Peters discovered this.)
-
- 17 Ock, 2001 2 kayıt (commit)
-
-
Guido van Rossum yazdı
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.
-
Guido van Rossum yazdı
- 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. :-)
-