|
|
|
|
0.9.9
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- C++ struct declarations, 'new' operator, and del for C++ delete.
|
|
|
|
|
|
|
|
|
|
- As well as the 'not None' modifier for extension type arguments, there
|
|
|
|
|
is now 'or None' to explicitly allow passing None. It is planned to make
|
|
|
|
|
'not None' the default in a future version. For now, a warning is issued
|
|
|
|
|
(once per Pyrex run) if you do not specify one or the other.
|
|
|
|
|
|
|
|
|
|
- Extension types may have a 'nogc' option to suppress GC support.
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Exceptions caught by an except clause are no longer put into the thread
|
|
|
|
|
state and cannot be retrieved using sys.exc_info(). To access the caught
|
|
|
|
|
exception, it must be bound to a name in the except clause. A third name
|
|
|
|
|
can be supplied to capture the traceback.
|
|
|
|
|
|
|
|
|
|
- PyString_InternFromString is now exposed under the name 'cintern' because
|
|
|
|
|
it is not a complete substitute for 'intern' (it can't handle strings
|
|
|
|
|
containing null bytes). [John Arbash Meinel]
|
|
|
|
|
|
|
|
|
|
- Disabled size check for cimported types because it was generating too
|
|
|
|
|
many false positives in the field.
|
|
|
|
|
|
|
|
|
|
- Added __fastcall calling convention. Also no longer assuming that an
|
|
|
|
|
unspecified calling convention is the same as __cdecl.
|
|
|
|
|
|
|
|
|
|
- Operations between signed and unsigned ints of the same size now have
|
|
|
|
|
an unsigned result.
|
|
|
|
|
|
|
|
|
|
- Py_ssize_t now ranked between long and long long.
|
|
|
|
|
|
|
|
|
|
- Declaration of __new__ in an extension type is now an error, in
|
|
|
|
|
preparation for introducing new semantics.
|
|
|
|
|
|
|
|
|
|
- Added size_t type, and made sizeof() return it.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- When casting the result of a function call to a Python type, the
|
|
|
|
|
function could be called twice. [David Martinez]
|
|
|
|
|
|
|
|
|
|
- __Pyx_GetException was not taking account of the fact that the traceback
|
|
|
|
|
could be NULL.
|
|
|
|
|
|
|
|
|
|
- sizeof(module.typename) did not work. [Daniele Pianu]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.6
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Check for gil when calling a function declared 'execpt *' or 'except ?'.
|
|
|
|
|
Acquire gil when reporting unraisable exception.
|
|
|
|
|
|
|
|
|
|
- Added iter2() function for 2-argument form of iter().
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Compiler crashed if base class of extension type was incompletely
|
|
|
|
|
defined.
|
|
|
|
|
|
|
|
|
|
- Compiler crash on misspelled method name in property declaration.
|
|
|
|
|
[Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Fixed deprecation warnings in 2.6
|
|
|
|
|
|
|
|
|
|
- Always preserve explicit type casts for non-Python types.
|
|
|
|
|
[Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Added workaround for threading initialisation bug in Python 2.3.
|
|
|
|
|
[Lisandro Dalcin]
|
|
|
|
|
|
|
|
|
|
- Deleting dict item with integer key did not work. [Titus Brown]
|
|
|
|
|
|
|
|
|
|
- Header files for cimported modules included in wrong order.
|
|
|
|
|
[Stephane Drouard]
|
|
|
|
|
|
|
|
|
|
- Don't allow a member of a ctypedef struct to reference itself.
|
|
|
|
|
[Tim Wakeham]
|
|
|
|
|
|
|
|
|
|
- Compiler crash due to attribute reference in compile-time expression.
|
|
|
|
|
[Hoyt Koepke]
|
|
|
|
|
|
|
|
|
|
- Public extension type attribute with cname didn't work.
|
|
|
|
|
[Mark Ellis]
|
|
|
|
|
|
|
|
|
|
- Memory leak related to exporting C functions. [Lisandro Dalcin]
|
|
|
|
|
|
|
|
|
|
- Compiler crash on return outside function. [Kurt Smith]
|
|
|
|
|
|
|
|
|
|
- Scope problem with extension types declared in pxd. [KS Sreeram]
|
|
|
|
|
|
|
|
|
|
- Calling a builtin method of a subclass of a builtin class did not work.
|
|
|
|
|
|
|
|
|
|
- Builtin hash() function had wrong return type. [John Arbash Meinel]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Added 'tags' to .hgignore file. [Kirill Smelkov]
|
|
|
|
|
|
|
|
|
|
- Disallow overriding a builtin method in a subclass of a builtin class.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.5
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Function export code was erroneously generated for 'extern' functions
|
|
|
|
|
declared in a .pxd file. [Sebastian Sable]
|
|
|
|
|
|
|
|
|
|
- The 'api' option was not recognised with 'ctypedef public class'.
|
|
|
|
|
[Lisandro Dalcin]
|
|
|
|
|
|
|
|
|
|
- MACOSX_DEPLOYMENT_TARGET is no longer set unless the undocumented -X
|
|
|
|
|
option is being used. Hopefully this will prevent complaints about it
|
|
|
|
|
from distutils. [Martin Field]
|
|
|
|
|
|
|
|
|
|
- Recognize MS_WINDOWS as well as WIN32. [Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Hexadecimal compile-time constants did not work. [Devan]
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Dependency files (.dep) are only created when compiling with timestamp
|
|
|
|
|
checking or recursion enabled.
|
|
|
|
|
|
|
|
|
|
Deprecations:
|
|
|
|
|
|
|
|
|
|
- The features introducted in 0.9.8 and 0.9.8.1 for cross-forward-declaring
|
|
|
|
|
extension types between .pxd files turn out to be unnecessary, since
|
|
|
|
|
the circular import problems they are aimed at can be avoided using
|
|
|
|
|
ordinary forward delcarations in the .pxd files ahead of any cimports.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.4
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Incorrect code generated for Python indexing with an unsigned int.
|
|
|
|
|
[Christopher Williams]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.3
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Compiling multiple source files at once should work as advertised
|
|
|
|
|
now.
|
|
|
|
|
|
|
|
|
|
- Assignment of a nogil function to a non-nogil function pointer
|
|
|
|
|
is now allowed.
|
|
|
|
|
|
|
|
|
|
- Applying += or -= to a pointer and an integer did not work.
|
|
|
|
|
[Arc Riley]
|
|
|
|
|
|
|
|
|
|
- Compiling a .pyx file whose name is not a valid module name now
|
|
|
|
|
reports an error instead of generating invalid C code.
|
|
|
|
|
[Robert Bradshaw]
|
|
|
|
|
|
|
|
|
|
- Integer indexing optimisation now performed only for signed
|
|
|
|
|
index types, to avoid change of semantics with index values
|
|
|
|
|
greater than the maximum positive signed int value. [Robert
|
|
|
|
|
Bradshaw]
|
|
|
|
|
|
|
|
|
|
- Non-void function declared 'except *' could produce C compiler
|
|
|
|
|
warning about uninitialised variable. [Lisandro Dalcin]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.2
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- A block of external functions can be declared nogil at once.
|
|
|
|
|
|
|
|
|
|
cdef extern from "somewhere.h" nogil:
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- The nogil attribute was not being checked for a match when
|
|
|
|
|
comparing function signatures.
|
|
|
|
|
|
|
|
|
|
- Improved error message for C method signature mismatch between
|
|
|
|
|
a class and its base class.
|
|
|
|
|
|
|
|
|
|
Bug workarounds:
|
|
|
|
|
|
|
|
|
|
- Multiple source files passed to Main.compile are being compiled
|
|
|
|
|
in separate contexts for the time being until I can sort out a
|
|
|
|
|
problem. You probably won't notice any difference except that
|
|
|
|
|
there will be no speed advantage over compiling them separately.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- It is no longer necessary to specify the base class of an
|
|
|
|
|
extension type in a forward declaration. Also, if the class is
|
|
|
|
|
defined in a .pxd file, the base class only needs to be specified
|
|
|
|
|
in the .pxd file, not the .pyx file.
|
|
|
|
|
[Arc Riley]
|
|
|
|
|
|
|
|
|
|
- There's now an even easier way to forward-declare a struct, union
|
|
|
|
|
or extension type in another module:
|
|
|
|
|
|
|
|
|
|
from blarg cimport class Foo
|
|
|
|
|
|
|
|
|
|
This simultaneously cimports the name Foo and forward-declares
|
|
|
|
|
it as an extension type. As well as 'class', you can also use
|
|
|
|
|
'struct' or 'union'.
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Casting a non-Python pointer type to a Python type no longer
|
|
|
|
|
generates an incref, unless one is required for other reasons.
|
|
|
|
|
[Arc Riley]
|
|
|
|
|
|
|
|
|
|
- More checks added for gil-requiring operations performed without
|
|
|
|
|
holding the gil.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.8
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* Augmented assignment operators (+=, etc.) are now supported.
|
|
|
|
|
|
|
|
|
|
* Package directories
|
|
|
|
|
|
|
|
|
|
Modules in packages no longer need to have dotted names. Instead,
|
|
|
|
|
a Python-like package directory structure can be used, with
|
|
|
|
|
package dirs marked by containing an __init__.py or __init__.pyx.
|
|
|
|
|
|
|
|
|
|
Top-level package directories are found by searching the include
|
|
|
|
|
directories specified by -I options (analogous to PYTHONPATH).
|
|
|
|
|
|
|
|
|
|
* Dependency tracking
|
|
|
|
|
|
|
|
|
|
The Pyrex compiler records information about other source files cimported
|
|
|
|
|
or included, and can automatically compile all the modules a given module
|
|
|
|
|
depends on, with timestamp checking.
|
|
|
|
|
|
|
|
|
|
This is enabled by a -r (recursive) option to the compiler, e.g.
|
|
|
|
|
|
|
|
|
|
pyrexc -r mainmodule.pyx
|
|
|
|
|
|
|
|
|
|
There are also two other new command-line options:
|
|
|
|
|
|
|
|
|
|
-t Enable timestamp checking. This is implied with -r.
|
|
|
|
|
|
|
|
|
|
-f Overrides implied -t when using -r and forces all
|
|
|
|
|
dependent modules to be compiled regardless of timestamps.
|
|
|
|
|
|
|
|
|
|
* Nogil restrictions relaxed
|
|
|
|
|
|
|
|
|
|
C functions declared nogil can now have Python objects as arguments.
|
|
|
|
|
The argument names are read-only inside the function when this is done.
|
|
|
|
|
|
|
|
|
|
Among other things, this allows C methods to be declared nogil (this
|
|
|
|
|
couldn't be done before because 'self' is always an object argument).
|
|
|
|
|
|
|
|
|
|
* Circular cimports
|
|
|
|
|
|
|
|
|
|
There is now a way of forward-declaring a struct, union or extension type
|
|
|
|
|
into another module. This allows two .pxd files to define extension types
|
|
|
|
|
that refer to each other without running into circular import problems.
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
cimport blarg
|
|
|
|
|
cdef class blarg.Blarg # Forward declaration
|
|
|
|
|
|
|
|
|
|
cdef class Foo:
|
|
|
|
|
cdef blarg.Blarg blg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.7.2
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Another integer indexing problem fixed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.7.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- The optimisation for indexing using a C int failed when the
|
|
|
|
|
object being indexed was a mapping rather than a sequence.
|
|
|
|
|
[Arc Riley]
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Old integer for-loop syntax is no longer deprecated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.7
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- Builtin constants and types are known, and are referenced directly
|
|
|
|
|
with no dictionary lookup.
|
|
|
|
|
|
|
|
|
|
- Direct calls are made to certain methods of lists and dicts when
|
|
|
|
|
their type is statically known.
|
|
|
|
|
|
|
|
|
|
- New builtin functions 'typecheck' and 'issubtype' added, providing
|
|
|
|
|
safer type checking than isinstance and issubclass (which can be
|
|
|
|
|
overridden).
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Redundant type test eliminated when assigning the result of an
|
|
|
|
|
extension type constructor call to a variable of the same type.
|
|
|
|
|
|
|
|
|
|
- No tp_traverse and tp_clear functions generated for types
|
|
|
|
|
without Python attributes.
|
|
|
|
|
|
|
|
|
|
- Safer code generated in tp_clear. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Indexing with a C int type generates calls to PySequence_GetItem
|
|
|
|
|
and PySequence_SetItem.
|
|
|
|
|
|
|
|
|
|
- Integer for-loop syntax streamlined to 'for x < i < y'.
|
|
|
|
|
|
|
|
|
|
- Appropriate C code generated for compile-time expressions
|
|
|
|
|
evaluating to float nan, inf and -inf. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Value raised by assert statement now only evaluated if the
|
|
|
|
|
assertion fails. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Comparing a value of an enum type with another value of a type
|
|
|
|
|
which is ctypedefed to the same enum type gave a spurious type
|
|
|
|
|
error. [Matt Hammond]
|
|
|
|
|
|
|
|
|
|
- Comparing an int with a float resulted in the float being cast
|
|
|
|
|
to an int before comparison. [Robin Becker]
|
|
|
|
|
|
|
|
|
|
- Compiler crashed on an invalid argument to a 'with nogil' statement.
|
|
|
|
|
[Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Incorrect code generated for function with keyword only args
|
|
|
|
|
and no * or ** args. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- GC type with non-GC base type caused crash due to trying to call
|
|
|
|
|
non-existent base tp_traverse and tp_clear functions. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Compile-time IF with no ELSE clause crashed compiler. [Kirk McDonald]
|
|
|
|
|
|
|
|
|
|
- Values in enum declaration were not being checked for appropriate type.
|
|
|
|
|
[Simon Burton]
|
|
|
|
|
|
|
|
|
|
- Improved the error message from attempting to declare a struct or
|
|
|
|
|
union member as a function. [Yong Sun]
|
|
|
|
|
|
|
|
|
|
- Referring to an undefined name in a compile-time constant crashed
|
|
|
|
|
the compiler. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.6.4
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Errors in setup.py corrected.
|
|
|
|
|
|
|
|
|
|
- Incorrect error checking code generated for builtin functions
|
|
|
|
|
and type slots with return type Py_ssize_t. [Robert Bradshaw]
|
|
|
|
|
|
|
|
|
|
- A counted reference was not kept to the module, so if the entry
|
|
|
|
|
in sys.modules was replaced, the module was freed prematurely.
|
|
|
|
|
[Franck Pommerau]
|
|
|
|
|
|
|
|
|
|
- A cimport statement inside a function crashed the compiler.
|
|
|
|
|
[Robert Bradshaw]
|
|
|
|
|
|
|
|
|
|
- __Pyx_ImportModule routine wasn't protected from multiple
|
|
|
|
|
definition when including _api.h files. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Temp variables holding exception values were not being set to
|
|
|
|
|
NULL after use in an except clause. [Robert Bradshaw]
|
|
|
|
|
|
|
|
|
|
- Protect __stdcall and __cdecl from redefinition. [Jim Kleckner]
|
|
|
|
|
|
|
|
|
|
- A temp var was not being set to NULL after api function import
|
|
|
|
|
code. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- __Pyx_ImportFunction was incorrectly decrefing a borrowed
|
|
|
|
|
reference. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Functions declared with_gil and external functions declared nogil
|
|
|
|
|
are now allowed to have Python arguments and return types.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.6.3
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- C API now only uses a single name in the module namespace
|
|
|
|
|
instead of one for each exported C function. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Multiple declarations with the same visibility and api options
|
|
|
|
|
can now be grouped into a 'cdef' block.
|
|
|
|
|
|
|
|
|
|
- The 'api' keyword can now be used on extension types to cause
|
|
|
|
|
generation of an api.h file when there are no exported C functions.
|
|
|
|
|
|
|
|
|
|
- Added a getattr3() builtin for the three-argument form of getattr.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Setup.py no longer uses an import to get the version number
|
|
|
|
|
being installed, to avoid a problem with setuptools.
|
|
|
|
|
|
|
|
|
|
- If a struct or union was forward-declared, certain types of error
|
|
|
|
|
message misleadingly referenced the source location of the forward
|
|
|
|
|
declaration rather than the definition.
|
|
|
|
|
|
|
|
|
|
- Calling convention specifier was being emitted in function
|
|
|
|
|
prototypes but not the corresponding definitions. [Atsuo Ishimoto]
|
|
|
|
|
|
|
|
|
|
- Added support for the --force option to Pyrex.Distutils.
|
|
|
|
|
[Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Compile-time "==" operator did not work. [Simon King]
|
|
|
|
|
|
|
|
|
|
- Header files generated for public and api declarations now
|
|
|
|
|
only contain types declared as 'public', instead of all types
|
|
|
|
|
defined in the module. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.6.2
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Corrected a problem with declaration ordering in generated C
|
|
|
|
|
code involving forward-declared struct, union or extension types.
|
|
|
|
|
|
|
|
|
|
- New distutils extension: Only compile .pyx if it is newer
|
|
|
|
|
than the corresponding .c file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.6.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Changed os.uname to platform.uname for portability.
|
|
|
|
|
[Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Fixed C compiler warning about incompatible types in 2.5.
|
|
|
|
|
[Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Also fixed a few other 2.5 problems.
|
|
|
|
|
|
|
|
|
|
- Fixed problem with the Extension class in the new Pyrex.Distutils
|
|
|
|
|
module.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.6
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New Features:
|
|
|
|
|
|
|
|
|
|
- Top-level C functions defined in one module can now be used in
|
|
|
|
|
another via cimport, and a C API can be produced to allow them
|
|
|
|
|
to be used from C code without linking to the extension module.
|
|
|
|
|
See "Interfacing with External C Code" and "Sharing Declarations
|
|
|
|
|
between Pyrex Modules" in the Language Overview. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Facilities added for releasing the GIL around a section of code
|
|
|
|
|
and acquiring it on entry to a C function. See "Acquiring and
|
|
|
|
|
Releasing the GIL under "Interfacing with External C Code" in
|
|
|
|
|
the Language Overview. [Ulisses Furquim, Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Some conditional compilation facilities have been added. See
|
|
|
|
|
"Conditional Compilation" under "Language Basics" in the
|
|
|
|
|
Language Overview. [Sam Rushing]
|
|
|
|
|
|
|
|
|
|
Language Changes:
|
|
|
|
|
|
|
|
|
|
- The __new__ special method of extension types is being renamed
|
|
|
|
|
to "__cinit__". For now, you will get a warning whenever you
|
|
|
|
|
declare a __new__ method for an extension type, and it will
|
|
|
|
|
automatically be renamed to __cinit__ for you. In the next
|
|
|
|
|
release, the warning will become an error and no renaming will
|
|
|
|
|
occur. In some later release, the __new__ method may be
|
|
|
|
|
re-introduced with different semantics. It is recommended that
|
|
|
|
|
you begin updating your sources now to use __cinit__.
|
|
|
|
|
|
|
|
|
|
- A 'raise' statement with no arguments (i.e. to re-raise the
|
|
|
|
|
last exception caught) is now required to be lexically within
|
|
|
|
|
the 'except' clause which caught the exception. This change was
|
|
|
|
|
necessary to efficiently support preserving the exception if an
|
|
|
|
|
intervening call raises and catches a different exception.
|
|
|
|
|
|
|
|
|
|
- The following new reserved words have been added:
|
|
|
|
|
|
|
|
|
|
with, DEF, IF, ELIF, ELSE
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Calls to many of the builtin functions are now compiled as
|
|
|
|
|
direct calls to Python/C API routines.
|
|
|
|
|
|
|
|
|
|
- A C type explicitly declared as 'signed' is represented as
|
|
|
|
|
such in the generated code, to acommodate platforms where
|
|
|
|
|
'char' is unsigned by default. [Francesc Altet]
|
|
|
|
|
|
|
|
|
|
- Python function can now have an argument of type "unsigned
|
|
|
|
|
char". [Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- A new Pyrex.Distutils implementation has been added, which
|
|
|
|
|
exports an Extension type supporting the following options:
|
|
|
|
|
|
|
|
|
|
pyrex_include_dirs - list of dirs to search for Pyrex header files
|
|
|
|
|
pyrex_create_listing_file - bool - write errs to listing file
|
|
|
|
|
pyrex_cplus - bool - generate C++ code
|
|
|
|
|
pyrex_c_in_temp - bool - put generated C files in temp dir
|
|
|
|
|
pyrex_gen_pxi - bool - generate .pxi file for public declarations
|
|
|
|
|
|
|
|
|
|
[Contributed by Billie G. Allie]
|
|
|
|
|
|
|
|
|
|
- Assert statements can be compiled out by arranging for
|
|
|
|
|
PYREX_WITHOUT_ASSERTIONS to be #defined at C compilation time.
|
|
|
|
|
[Contributed by Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Support for __index__ slot added to extension types.
|
|
|
|
|
[William Stein]
|
|
|
|
|
|
|
|
|
|
- Exception types now properly checked according to pre or post
|
|
|
|
|
2.5 rules as appropriate.
|
|
|
|
|
|
|
|
|
|
- Py_ssize_t support added. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Windows __stdcall and __cdecl qualifiers now supported.
|
|
|
|
|
[Suggested by Eric Devolder]
|
|
|
|
|
|
|
|
|
|
- Keyword-only argument support added. [Suggested by Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- An 'include' statement can now appear anywhere that another kind
|
|
|
|
|
of statement or declaration can appear, instead of being restricted
|
|
|
|
|
to the top level. [Caio Marcelo]
|
|
|
|
|
|
|
|
|
|
- Unnecessary PyErr_Occurred() call to check result of
|
|
|
|
|
PyString_AsString() no longer made.
|
|
|
|
|
|
|
|
|
|
- Complicated C types are displayed more readably in error messages.
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- A Python function argument declared as "char" or "unsigned
|
|
|
|
|
char" now expects a Python integer rather than a string of
|
|
|
|
|
length 1, for consistency with the way automatic conversions
|
|
|
|
|
are done elsewhere.
|
|
|
|
|
|
|
|
|
|
- Support for string and tuple exceptions dropped.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- If an external ctypedef type was used as the type of an
|
|
|
|
|
argument to a Python function, a declaration was generated
|
|
|
|
|
using the underlying type rather than the typedef name.
|
|
|
|
|
[Francesc Altet]
|
|
|
|
|
|
|
|
|
|
- Some problems with int/enum and pointer/array compatibility
|
|
|
|
|
fixed. [Eric Huss, Stefan Behnel, Jiba]
|
|
|
|
|
|
|
|
|
|
- Eliminated C compiler warning when comparing an extension
|
|
|
|
|
type reference to None using 'is' or 'is not'
|
|
|
|
|
|
|
|
|
|
- Eliminated C compiler warnings about docstrings of C functions
|
|
|
|
|
and special methods being unused. [Francesc Altet]
|
|
|
|
|
|
|
|
|
|
- When compiling with -O, raising an exception in a C function
|
|
|
|
|
that couldn't propagate exceptions produced a compiler
|
|
|
|
|
warning about the return value possibly being uninitialised.
|
|
|
|
|
|
|
|
|
|
- Fixed warning about function declaration not being a prototype
|
|
|
|
|
caused by C method table initialisation code.
|
|
|
|
|
|
|
|
|
|
- Spurious initialisation was generated for unused local variable.
|
|
|
|
|
[Helmut Jarausch]
|
|
|
|
|
|
|
|
|
|
- Declaration of a non-extern C function without definition
|
|
|
|
|
was not detected. [Lenard Lindstrom]
|
|
|
|
|
|
|
|
|
|
- Applying ** directly to two C int types is now disallowed due
|
|
|
|
|
to ambiguity (it's not clear whether to use C pow() or convert
|
|
|
|
|
to Python ints). [Didier Deshommes]
|
|
|
|
|
|
|
|
|
|
- Traverse and clear code was being inadvertently generated for
|
|
|
|
|
the __weakref__ slot of a weakly-referenceable extension type.
|
|
|
|
|
[Peter Johnson]
|
|
|
|
|
|
|
|
|
|
- Statements other than def inside a property declaration were
|
|
|
|
|
crashing the compiler. [Sven Berkvens]
|
|
|
|
|
|
|
|
|
|
- Defining an extension type with different visibility from its
|
|
|
|
|
declaration in a .pxd file crashed the compiler.
|
|
|
|
|
[Alex Coventry]
|
|
|
|
|
|
|
|
|
|
- Instantiating an exception type whose base class __new__ method
|
|
|
|
|
raises an exception caused a segfault. [Gustavo Sverzut Barbieri]
|
|
|
|
|
|
|
|
|
|
- The 'import pkg.module as name' form of import statement did not
|
|
|
|
|
work correctly. [Dan]
|
|
|
|
|
|
|
|
|
|
- Fixed error-checking typo in __Pyx_GetStarArgs(). [Eric Huss]
|
|
|
|
|
|
|
|
|
|
- Trailing comma now allowed on argument list. [Jim Kleckner]
|
|
|
|
|
|
|
|
|
|
- Behaviour of reraise made to match Python more closely.
|
|
|
|
|
[Eric Huss]
|
|
|
|
|
|
|
|
|
|
- An empty C variable declaration crashed the compiler.
|
|
|
|
|
|
|
|
|
|
- Now includes math.h instead of generating own declaration
|
|
|
|
|
of pow(). [Leif Strand]
|
|
|
|
|
|
|
|
|
|
- Missing import of sys in LinuxSystem.py added. [Scott Jackson]
|
|
|
|
|
|
|
|
|
|
- Typecasts using a ctypedef type were not using the ctypedef
|
|
|
|
|
name. [Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Workaround added to setup.py for a problem with bdist_wininst.
|
|
|
|
|
[Alexander Belchenko]
|
|
|
|
|
|
|
|
|
|
- Subtle error in parsing empty function declarators corrected.
|
|
|
|
|
|
|
|
|
|
- Checks added for some type combinations that are illegal in C:
|
|
|
|
|
array of functions, function returning function or array, cast
|
|
|
|
|
to a function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.5.1a
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Package list now calculated dynamically in setup.py so that
|
|
|
|
|
it will work with or without the testing framework installed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.5.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Comparing two values of the same enum type incorrectly
|
|
|
|
|
produced an error. [Anders Gustafsson]
|
|
|
|
|
|
|
|
|
|
- Compiler crash caused by assigning a Python value to
|
|
|
|
|
a variable of an enum type. [Peter Johnson]
|
|
|
|
|
|
|
|
|
|
- Comparison between pointer and array incorrectly produced
|
|
|
|
|
a type mismatch error. [Helmut Jarausch]
|
|
|
|
|
|
|
|
|
|
- Unused local Python variable had spurious init/cleanup code
|
|
|
|
|
generated for it, causing C compilation errors. [Helmut Jarausch]
|
|
|
|
|
|
|
|
|
|
- Updated list of packages in setup.py.
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- NULL in Pyrex source now translated into NULL instead of 0
|
|
|
|
|
in C code, to allow for the possibility of calling something
|
|
|
|
|
not defined with a prototype in an external header. [Adapted Cat]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.5
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Exception return values may now be specified by arbitrary
|
|
|
|
|
constant expressions of appropriate type, not just literals.
|
|
|
|
|
[Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Redundant type check now omitted when passing a literal None
|
|
|
|
|
to a function expecting an extension type. [Patch by Sam Rushing]
|
|
|
|
|
|
|
|
|
|
- New-style classes now allowed as exceptions for compatibility
|
|
|
|
|
with Python 2.5 (inheritance from BaseException not currently
|
|
|
|
|
checked). [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Sequence unpacking is now done using the iterator protocol
|
|
|
|
|
instead of indexing.
|
|
|
|
|
|
|
|
|
|
- Allocation of an empty tuple is avoided when making a
|
|
|
|
|
Python call with no arguments. [Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- Most warnings about unused variables and labels have been
|
|
|
|
|
eliminated.
|
|
|
|
|
|
|
|
|
|
- Support for running the test suite on Linux added but not
|
|
|
|
|
yet fully tested. [Based in part on patch by Eric Wald].
|
|
|
|
|
|
|
|
|
|
- Makefile included for compiling the patched Carbon File module
|
|
|
|
|
used by the MacOSX test code.
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Type rules for enums tightened for compatibility with C++.
|
|
|
|
|
|
|
|
|
|
- Direct assignment from float to int disallowed to prevent
|
|
|
|
|
C++ compilation warnings.
|
|
|
|
|
|
|
|
|
|
- Hex literals left as hex in C code to avoid warnings from
|
|
|
|
|
the C compiler about decimal constants becoming unsigned.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Exception raised during argument conversion could cause crash
|
|
|
|
|
due to uninitialised local variables. [Konrad Hinsen]
|
|
|
|
|
|
|
|
|
|
- Assignment to a C attribute of an extension type from a
|
|
|
|
|
different type could generate C code with a pointer type
|
|
|
|
|
mismatch. [Atsuo Ishimoto]
|
|
|
|
|
|
|
|
|
|
- Backslash in a string literal before a non-special character
|
|
|
|
|
was not handled correctly. [Yuan Mang]
|
|
|
|
|
|
|
|
|
|
- Temporary vars used by del statement not being properly
|
|
|
|
|
released, sometimes leading to double decrefs. [Jiba]
|
|
|
|
|
|
|
|
|
|
- A return statement whose expression raises an exception
|
|
|
|
|
inside a try-except that catches the exception could cause
|
|
|
|
|
a crash. [Anders Gustafsson]
|
|
|
|
|
|
|
|
|
|
- Fixed type compatibility checking problem between pointers
|
|
|
|
|
and arrays. [Lenard Lindstrom]
|
|
|
|
|
|
|
|
|
|
- Circular imports between modules defining extension types
|
|
|
|
|
caused unresolvable import order conflicts. [Mike Wyatt]
|
|
|
|
|
|
|
|
|
|
- Cimporting multiple submodules from the same package caused
|
|
|
|
|
a redefined name error for the top level name. [Martin Albrecht]
|
|
|
|
|
|
|
|
|
|
- Incorrect reference counting when assigning to an element of an
|
|
|
|
|
array that is a C attribute of an extension type. [Igor Khavkine]
|
|
|
|
|
|
|
|
|
|
- Weak-referenceable extension types were not implemented
|
|
|
|
|
properly. [Chris Perkins, Peter Johnson]
|
|
|
|
|
|
|
|
|
|
- Crash if C variable declared readonly outside an extension
|
|
|
|
|
type definition. [Eric Huss]
|
|
|
|
|
|
|
|
|
|
Doc updates:
|
|
|
|
|
|
|
|
|
|
- Expanded discussion of the need for type declarations to enable
|
|
|
|
|
access to attributes of extension types.
|
|
|
|
|
|
|
|
|
|
- Added a section "Source Files and Compilation" explaining the
|
|
|
|
|
rules for naming of source files of modules residing in packages,
|
|
|
|
|
and instructions for using the compiler and distutils extension.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.4.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Fixed indentation problem in Pyrex.Distutils.build_ext.
|
|
|
|
|
[Oliver Grisel]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.9.4
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Improvements:
|
|
|
|
|
|
|
|
|
|
- All use of lvalue casts has been eliminated, for
|
|
|
|
|
compatibility with gcc4.
|
|
|
|
|
|
|
|
|
|
- PyMODINIT_FUNC now used to declare the module init function.
|
|
|
|
|
|
|
|
|
|
- Generated code should be compilable as either C or C++.
|
|
|
|
|
When compiling as C++, "extern C" is used where appropriate
|
|
|
|
|
to preserve linkage semantics.
|
|
|
|
|
|
|
|
|
|
- An extension type can be made weak-referenceable by
|
|
|
|
|
giving it a C attribute of type object called __weakref__.
|
|
|
|
|
|
|
|
|
|
- Source files opened in universal newlines mode.
|
|
|
|
|
|
|
|
|
|
- Support for public extension type C attributes of type
|
|
|
|
|
long long and unsigned long long added (but not tested).
|
|
|
|
|
[Sam Rushing]
|
|
|
|
|
|
|
|
|
|
- Distutils include directories now passed to Pyrex compiler.
|
|
|
|
|
[Konrad Hinsen]
|
|
|
|
|
|
|
|
|
|
- Integer constants with an "L" suffix are now allowed
|
|
|
|
|
and are converted to Python long integers. [Rainer Deyke]
|
|
|
|
|
|
|
|
|
|
- A broken .c file is no longer left behind if there are
|
|
|
|
|
compilation errors.
|
|
|
|
|
|
|
|
|
|
- Using the result of a Python indexing or attribute access
|
|
|
|
|
operation as a char * is no longer considered an error in
|
|
|
|
|
most cases, as the former behaviour proved to be more
|
|
|
|
|
annoying than helpful.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Fixed problems with conversion from Python integers to
|
|
|
|
|
C unsigned longs. Now use PyInt_AsUnsignedLongMask and
|
|
|
|
|
PyInt_AsUnsignedLongLongMask instead of the PyLong_*
|
|
|
|
|
functions (which only work on Python longs). [Wim Vree]
|
|
|
|
|
|
|
|
|
|
- C unsigned ints now converted to/from Python longs intead
|
|
|
|
|
of Python ints to avoid overflow problems. [Heiko Wundram]
|
|
|
|
|
|
|
|
|
|
- Correct PyArg_ParseTuple format characters now used for
|
|
|
|
|
unsigned types. [Jeff Bowden]
|
|
|
|
|
|
|
|
|
|
- Nonzero return value from a base class tp_traverse call
|
|
|
|
|
is handled.
|
|
|
|
|
|
|
|
|
|
- Taking sizeof an incomplete type caused a crash while
|
|
|
|
|
producing an error message. [Drew Perttula]
|
|
|
|
|
|
|
|
|
|
- If a module cimported itself, definitions of global variables
|
|
|
|
|
were generated twice. [Parzival Herzog]
|
|
|
|
|
|
|
|
|
|
- Distutils extension updated to handle changed signature of
|
|
|
|
|
swig_sources(). [David M. Cooke]
|
|
|
|
|
|
|
|
|
|
- Incorrect C code generated for a raw string containing a double
|
|
|
|
|
quote preceded by a backslash. [Thomas Drake]
|
|
|
|
|
|
|
|
|
|
- Declaration of public C function with an exception value written
|
|
|
|
|
to generated .pxi file without the except clause. [Robby Dermody]
|
|
|
|
|
|
|
|
|
|
- __delitem__ method of an extension type with no __setitem__
|
|
|
|
|
did not get called. [Richard Boulton]
|
|
|
|
|
|
|
|
|
|
- A spurious Py_INCREF was generated when a return statement
|
|
|
|
|
required a type test. [Jonathan Doda]
|
|
|
|
|
|
|
|
|
|
- Casting a value to a function pointer and then immediately
|
|
|
|
|
calling it generated a cast to a function instead of a cast
|
|
|
|
|
to a function pointer. [Simon Burton]
|
|
|
|
|
|
|
|
|
|
- Py_TPFLAGS_HAVE_GC was not being set on an extension type that
|
|
|
|
|
inherited from an external extension type that used GC but did
|
|
|
|
|
not itself have any PyObject* attributes.
|
|
|
|
|
[Michael Hordijk]
|
|
|
|
|
|
|
|
|
|
- A return statement inside a for statement leaked a reference
|
|
|
|
|
to the loop's iterator.
|
|
|
|
|
[J<>rgen Kartnaller]
|
|
|
|
|
|
|
|
|
|
- Full module name now appears in __module__ attribute of classes
|
|
|
|
|
and extension types, provided a correct dotted name is used
|
|
|
|
|
for the .pyx file. [Giovanni Bajo]
|
|
|
|
|
|
|
|
|
|
- Public extension type with no C attributes produced an
|
|
|
|
|
invalid .pxi file. [Simon Burton]
|
|
|
|
|
|
|
|
|
|
- Using a dict constructor as the second operand of a boolean
|
|
|
|
|
expression crashed the Pyrex compiler.
|
|
|
|
|
[Stefan Behnel]
|
|
|
|
|
|
|
|
|
|
- A C declaration list ending with a comma resulted in invalid
|
|
|
|
|
C code being generated. [Alex Coventry]
|
|
|
|
|
|
|
|
|
|
- A raw string containing two consecutive backslashes produced
|
|
|
|
|
incorrect C code. [Helmut Jarausch]
|
|
|
|
|
|
|
|
|
|
- An error is reported if you attempt to declare a special
|
|
|
|
|
method of an extension type using 'cdef' instead of 'def'.
|
|
|
|
|
[Sam Rushing]
|
|
|
|
|
|
|
|
|
|
0.9.3
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Types defined with a ctypedef in a 'cdef extern from' block
|
|
|
|
|
are now referred to by the typedef name in generated C code,
|
|
|
|
|
so it is no longer necessary to match the type in the C
|
|
|
|
|
header file exactly.
|
|
|
|
|
|
|
|
|
|
- Conversion to/from unsigned long now done with
|
|
|
|
|
PyLong_AsUnsignedLong and PyLong_FromUnsignedLong. [Dug Song]
|
|
|
|
|
|
|
|
|
|
- A struct, union or enum definition in a 'cdef extern from'
|
|
|
|
|
block may now be left empty (using 'pass'). This can be useful
|
|
|
|
|
if you need to declare a variable of that type, but don't need
|
|
|
|
|
to refer to any of its members.
|
|
|
|
|
|
|
|
|
|
- More flexible about ordering of qualifiers such as 'long' and
|
|
|
|
|
'unsigned'. ["John (J5) Palmieri"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Non-interned string literals used in a Python class
|
|
|
|
|
definition did not work. [Atsuo Ishimoto, Andreas Kostyrka]
|
|
|
|
|
|
|
|
|
|
- Return types of the buffer interface functions for extension
|
|
|
|
|
types have been corrected. [Dug Song]
|
|
|
|
|
|
|
|
|
|
- Added 'static' to declarations of string literals. [Phil Frost]
|
|
|
|
|
|
|
|
|
|
- Float literals are now copied directly to the C code as written,
|
|
|
|
|
to avoid problems with loss of precision. [Mario Pernici]
|
|
|
|
|
|
|
|
|
|
- Inheriting from an extension type with C methods defined in
|
|
|
|
|
another Pyrex module did not work. [Itamar Shtull-Trauring]
|
|
|
|
|
|
|
|
|
|
0.9.2.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Corrected an import statement setup.py, and made it
|
|
|
|
|
check for a unix platform in a more reliable way.
|
|
|
|
|
|
|
|
|
|
0.9.2
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Names of Python global variables and attributes are now
|
|
|
|
|
interned, and PyObject_GetAttr/SetAttr are used instead
|
|
|
|
|
of PyObject_GetAttrString/SetAttrString. String literals
|
|
|
|
|
which resemble Python identifiers are also interned.
|
|
|
|
|
|
|
|
|
|
- String literals are now converted to Python objects only
|
|
|
|
|
once instead of every time they are used.
|
|
|
|
|
|
|
|
|
|
- NUL characters are now allowed in Python string literals.
|
|
|
|
|
|
|
|
|
|
- Added some missing error checking code to the beginning
|
|
|
|
|
of module init functions. It's unlikely the operations
|
|
|
|
|
involved would ever fail, but you never know.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Corrected some problems introduced by moving the Plex
|
|
|
|
|
package.
|
|
|
|
|
|
|
|
|
|
0.9.1.1
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Corrected a problem in the setup.py (pyrexc script incorrectly
|
|
|
|
|
named).
|
|
|
|
|
|
|
|
|
|
- Updated the distutils extension to match changes in the
|
|
|
|
|
Pyrex compiler calling interface.
|
|
|
|
|
|
|
|
|
|
- Doing 'make clean' in Demos/callback was removing a little too
|
|
|
|
|
much (that's why cheesefinder.c kept disappearing).
|
|
|
|
|
|
|
|
|
|
0.9.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- A C method can now call an inherited C method by the usual
|
|
|
|
|
Python technique. [Jiba]
|
|
|
|
|
|
|
|
|
|
- The __modname__ of a Python class is now set correctly. [Paul Prescod]
|
|
|
|
|
|
|
|
|
|
- A MANIFEST.in file has been added to the distribution to
|
|
|
|
|
facilitate building rpms. [contributed by Konrad Hinsen]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Conditional code now generated to allow for the renaming of LONG_LONG
|
|
|
|
|
to PY_LONG_LONG that occurred between Python 2.2 and 2.3.
|
|
|
|
|
|
|
|
|
|
- Header files referenced in cimported modules were not being included.
|
|
|
|
|
[Tom Popovich]
|
|
|
|
|
|
|
|
|
|
- References to C functions and variables in a cimported module were
|
|
|
|
|
not being recognised if made from within a local scope. [Tom Popovich]
|
|
|
|
|
|
|
|
|
|
- Spurious declarations in code generated for a "finally" block.
|
|
|
|
|
[Brandon Long]
|
|
|
|
|
|
|
|
|
|
- Attempting to return a value from a __contains__ method didn't work.
|
|
|
|
|
[Andreas Kostyrka]
|
|
|
|
|
|
|
|
|
|
- Incorrect code generated for an extension type with C methods
|
|
|
|
|
inheriting from a base type with no C methods. [Robin Becker]
|
|
|
|
|
|
|
|
|
|
- Failure to report an error if a C method was defined in the
|
|
|
|
|
implementation part of an extension type that was not declared
|
|
|
|
|
in the corresponding definition part. Documentation also updated
|
|
|
|
|
to explain that this is necessary. [Jiba]
|
|
|
|
|
|
|
|
|
|
- Made it an error to forward-declare an extension type with
|
|
|
|
|
a different base class specification from its subsequent
|
|
|
|
|
definition. [Jiba]
|
|
|
|
|
|
|
|
|
|
- C attributes of an extension type were not being propagated
|
|
|
|
|
through more than one level of inheritance. [Jiba]
|
|
|
|
|
|
|
|
|
|
- If a garbage collection occurred early enough in the __new__
|
|
|
|
|
method of an extension type with Python-valued C attributes,
|
|
|
|
|
a crash could occur in its tp_traverse function.
|
|
|
|
|
[reported by Jiba, fix suggested by Paul Prescod]
|
|
|
|
|
|
|
|
|
|
- An empty vtable struct is no longer generated for extension
|
|
|
|
|
types with no C methods. [Robin Becker]
|
|
|
|
|
|
|
|
|
|
- Memory was leaked in the sq_item function of an extension
|
|
|
|
|
type with a __getitem__ method. [Atsuo Ishimoto]
|
|
|
|
|
|
|
|
|
|
- Code generated to work around a bug in some versions of Python
|
|
|
|
|
2.2 which fails to initialise the tp_free slot correctly in
|
|
|
|
|
some circumstances. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
- Compiler crash when defining an extension type with a base
|
|
|
|
|
class specified by a dotted name. [Alain Pointdexter]
|
|
|
|
|
|
|
|
|
|
- Referencing an extension type defined in a cimported module
|
|
|
|
|
at run time did not work correctly. [Alain Pointdexter]
|
|
|
|
|
|
|
|
|
|
- Incorrect object struct code generated for an extension type
|
|
|
|
|
whose base class was defined in a .pxd file. [Alain Pointdexter]
|
|
|
|
|
|
|
|
|
|
- Redeclaring a type that wasn't previously an extension type
|
|
|
|
|
as an extension type caused a compiler crash. [Scott Robinson]
|
|
|
|
|
|
|
|
|
|
- Incorrect code was generated for return statements in a
|
|
|
|
|
special method with no return value. [Gary Bishop]
|
|
|
|
|
|
|
|
|
|
- Single-line def statement did not work. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
Modifications:
|
|
|
|
|
|
|
|
|
|
- Only the last pathname component of the .pyx file is reported in
|
|
|
|
|
backtraces now. [Bryan Weingarten]
|
|
|
|
|
|
|
|
|
|
- Documentation corrected to remove the erroneous statement that
|
|
|
|
|
extension classes can have a __del__ method. [Bryan Weingarten]
|
|
|
|
|
|
|
|
|
|
- Note added to documentation explaining that it is not possible
|
|
|
|
|
for an extension type's __new__ method to explicitly call the
|
|
|
|
|
inherited __new__ method.
|
|
|
|
|
|
|
|
|
|
- The version of Plex included with Pyrex is now installed
|
|
|
|
|
as a subpackage of the Pyrex package, rather than as a
|
|
|
|
|
top-level package, so as not to interfere with any other
|
|
|
|
|
version of Plex the user may have installed.
|
|
|
|
|
|
|
|
|
|
0.9
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- Extension types can have properties. See the new "Properties"
|
|
|
|
|
section in the "Extension Types" page.
|
|
|
|
|
|
|
|
|
|
- An extension type can inherit from a builtin type or another
|
|
|
|
|
extension type. See "Subclassing" in the "Extension Types" page.
|
|
|
|
|
|
|
|
|
|
- Extension types can have C methods, which can be overridden
|
|
|
|
|
in derived extension types. See "C Methods" in the "Extension Types"
|
|
|
|
|
page.
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Conversion is now performed between C long longs and Python
|
|
|
|
|
long integers without chopping to the size of a C long.
|
|
|
|
|
Also the Python PY_LONG_LONG type is now used for long longs
|
|
|
|
|
for greater portability.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Names were sometimes being generated that were insufficiently
|
|
|
|
|
unique in the presence of cimported declarations.
|
|
|
|
|
|
|
|
|
|
- Changed the way the included filename table is declared from
|
|
|
|
|
char *[] to char **, to stop MSVC from complaining about it
|
|
|
|
|
having an unknown size. [Alexander A Naanou]
|
|
|
|
|
|
|
|
|
|
- Second argument of assert statement was not being coerced
|
|
|
|
|
to a Python value. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Return statement without value wasn't accepted in some
|
|
|
|
|
extension type special methods when it should have been.
|
|
|
|
|
[Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Attempting to call a non-function C value crashed the
|
|
|
|
|
compiler. [John J Lee]
|
|
|
|
|
|
|
|
|
|
- Functions declared as "except *" were not returning exceptions.
|
|
|
|
|
[John J Lee]
|
|
|
|
|
|
|
|
|
|
- A syntax warning from Plex about assignment to None has
|
|
|
|
|
been eliminated. [Gordon Williams]
|
|
|
|
|
|
|
|
|
|
- Public function declaration with empty argument list was
|
|
|
|
|
producing (void) in .pxi file. [Michael P. Dubner]
|
|
|
|
|
|
|
|
|
|
- Incorrect error signalling code was being generated in the
|
|
|
|
|
__hash__ special method of an extension type.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.8.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Names of structs, unions and enums in external header
|
|
|
|
|
files were getting mangled when they shouldn't have been.
|
|
|
|
|
[Norman Shelley]
|
|
|
|
|
|
|
|
|
|
- Modified distutils extension so that it will stop before
|
|
|
|
|
compiling the C file if the Pyrex compiler reports errors.
|
|
|
|
|
[John J Lee]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.8
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- INCOMPATIBLE CHANGE: The type object of an external extension
|
|
|
|
|
type is now imported at run time using the Python import
|
|
|
|
|
mechanism. To make this possible, an 'extern' extension type
|
|
|
|
|
declaration must DECLARE THE MODULE from which the extension
|
|
|
|
|
type originates. See the new version of the "Extension Types"
|
|
|
|
|
documentation for details.
|
|
|
|
|
|
|
|
|
|
This change was made to eliminate the need for Pyrex to be
|
|
|
|
|
told the C name of the type object, or for the Pyrex module
|
|
|
|
|
to be linked against the object code providing the type object.
|
|
|
|
|
|
|
|
|
|
You will have to update any existing external extension type
|
|
|
|
|
declarations that you are using. I'm sorry about that, but it
|
|
|
|
|
was too hard to support both the old and new ways.
|
|
|
|
|
|
|
|
|
|
- Compile-time importing: A Pyrex module can now import declarations
|
|
|
|
|
from another Pyrex module using the new 'cimport' statement. See
|
|
|
|
|
the new section on "Sharing Declarations Between Pyrex Modules" in
|
|
|
|
|
the documentation.
|
|
|
|
|
|
|
|
|
|
Minor improvements:
|
|
|
|
|
|
|
|
|
|
- An error is reported if you declare a struct, union or
|
|
|
|
|
extension type using 'cdef' in one place and 'ctypedef'
|
|
|
|
|
in another.
|
|
|
|
|
|
|
|
|
|
- Struct, union and extension types can only be forward-
|
|
|
|
|
declared using 'cdef', not 'ctypedef' (otherwise invalid
|
|
|
|
|
C code would be generated).
|
|
|
|
|
|
|
|
|
|
- The 'global' statement can be used at the module level to
|
|
|
|
|
declare that a name is a module-level name rather than a
|
|
|
|
|
builtin. This can be used to access module attributes such
|
|
|
|
|
as __name__ that would otherwise be assumed to be builtins.
|
|
|
|
|
[Pat Maupin]
|
|
|
|
|
|
|
|
|
|
- The 'assert' statement now accepts a second argument.
|
|
|
|
|
[Francois Pinard]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- When using Python 2.3, "True" or "False" could sometimes
|
|
|
|
|
turn up in generated code instead of "1" or "0". [Adam Hixson]
|
|
|
|
|
|
|
|
|
|
- Function return value not always converted to or from a
|
|
|
|
|
Python object when it should have been.
|
|
|
|
|
|
|
|
|
|
- Certain kinds of error in a function call expression
|
|
|
|
|
could crash the compiler. ["Edward C. Jones"]
|
|
|
|
|
|
|
|
|
|
- Fixed memory leak in functions with * or ** args. [Alexander A Naanou]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.7.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Calling a function declared as returning an extension
|
|
|
|
|
type could crash the compiler.
|
|
|
|
|
|
|
|
|
|
- A function call with type errors in the argument list
|
|
|
|
|
could crash the compiler.
|
|
|
|
|
|
|
|
|
|
- An 'else' clause on a for-from statement could crash
|
|
|
|
|
the compiler.
|
|
|
|
|
|
|
|
|
|
- Incorrect casting code was generated when a generic
|
|
|
|
|
object argument of a special method was declared as
|
|
|
|
|
being of an extension type. [Phillip J. Eby]
|
|
|
|
|
|
|
|
|
|
- A blank line that couldn't be interpreted wholly as
|
|
|
|
|
a valid indentation sequence caused a syntax error.
|
|
|
|
|
In particular, a formfeed character on an otherwise
|
|
|
|
|
blank line wasn't accepted. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Parallel assignments were incorrectly optimised.
|
|
|
|
|
|
|
|
|
|
- A bare tuple constructor with an extra comma at the
|
|
|
|
|
end of a line caused a syntax error.
|
|
|
|
|
|
|
|
|
|
0.7
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- Attributes of extension types can be exposed to Python
|
|
|
|
|
code, either read/write or read-only.
|
|
|
|
|
|
|
|
|
|
- Different internal and external names can be specified
|
|
|
|
|
for C entities.
|
|
|
|
|
|
|
|
|
|
- None is a compile-time constant, and more efficient code
|
|
|
|
|
is generated to reference it.
|
|
|
|
|
|
|
|
|
|
- Command line options for specifying directories to
|
|
|
|
|
search for include files.
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- More efficient code is generated for access to Python
|
|
|
|
|
valued C attributes of extension types.
|
|
|
|
|
|
|
|
|
|
- Cosmetic code improvement: Less casting back and forth
|
|
|
|
|
between extension types and PyObject * when referencing
|
|
|
|
|
C members of the object struct.
|
|
|
|
|
|
|
|
|
|
- C arguments and variables declared as an extension type
|
|
|
|
|
can take the value None.
|
|
|
|
|
|
|
|
|
|
- Form feed characters are accepted as whitespace.
|
|
|
|
|
|
|
|
|
|
- Function names in tracebacks are qualified with
|
|
|
|
|
module name and class name.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- A sufficiently complex expression in a boolean context
|
|
|
|
|
could cause code to be generated twice for the same
|
|
|
|
|
subexpression.
|
|
|
|
|
|
|
|
|
|
- Incorrect casting code was generated when passing an
|
|
|
|
|
extension type to a function expecting a generic Python
|
|
|
|
|
object.
|
|
|
|
|
|
|
|
|
|
- Executable statements are now disallowed inside a
|
|
|
|
|
cdef class block (previously they silently caused
|
|
|
|
|
crazy C code to be generated).
|
|
|
|
|
|
|
|
|
|
- Tracebacks should now report the correct filename for
|
|
|
|
|
functions defined in files included with the 'include'
|
|
|
|
|
statement.
|
|
|
|
|
|
|
|
|
|
- The documentation incorrectly claimed that an extension
|
|
|
|
|
type can't have a __del__ method. In fact, it can, and
|
|
|
|
|
it behaves as expected.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.6.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Fixed broken distutils extension.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.6
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- Command line options for reporting version number,
|
|
|
|
|
requesting a listing file and specifying the name of
|
|
|
|
|
the generated C file.
|
|
|
|
|
|
|
|
|
|
- An 'include' statement allows inclusion of declarations
|
|
|
|
|
from other Pyrex source files.
|
|
|
|
|
|
|
|
|
|
- If there are any public declarations, a Pyrex include
|
|
|
|
|
file is generated (as well as a .h file) containing
|
|
|
|
|
declarations for them.
|
|
|
|
|
|
|
|
|
|
- Extension types can be declared public, so their C
|
|
|
|
|
attributes are visible to other Pyrex and C code.
|
|
|
|
|
|
|
|
|
|
- Try-except statements can now have an 'else' clause.
|
|
|
|
|
[Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Multiple simple statements can be placed on one line
|
|
|
|
|
separated by semicolons.
|
|
|
|
|
|
|
|
|
|
- A suite consisting of a simple statement list can now
|
|
|
|
|
be placed on the same line after the colon in most
|
|
|
|
|
cases. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- The automatic coercion of a C string to a C char has
|
|
|
|
|
been removed (it proved to be too error-prone).
|
|
|
|
|
Instead, there is a new form of literal for C
|
|
|
|
|
character constants: c'X'
|
|
|
|
|
|
|
|
|
|
- The __get__ special method (used by descriptor objects)
|
|
|
|
|
now allows for the possibility of the 2nd or 3rd
|
|
|
|
|
arguments being NULL. Also the __set__ method has been
|
|
|
|
|
split into two methods, __set__ and __delete__.
|
|
|
|
|
[Phillip J. Eby]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Values unpacked into a non-Python destination variable
|
|
|
|
|
were not being converted before assignment. [Gareth Watts]
|
|
|
|
|
|
|
|
|
|
- Hex constants greater than 0x7fffffff caused compiler
|
|
|
|
|
to crash. [Gareth Watts]
|
|
|
|
|
|
|
|
|
|
- Type slots are no longer statically initialised with
|
|
|
|
|
extern function pointers, to avoid problems with
|
|
|
|
|
some compilers. The hack in the distutils extension
|
|
|
|
|
to work around this by compiling as C++ has been
|
|
|
|
|
disabled. [Phillip J. Eby]
|
|
|
|
|
|
|
|
|
|
- Fixed several more instances of the error-reporting
|
|
|
|
|
routine being called with arguments in the wrong
|
|
|
|
|
order. Hoping I've *finally* got all of them now...
|
|
|
|
|
|
|
|
|
|
- Nested for-from loops used the same control variable.
|
|
|
|
|
[Sebastien de Menten]
|
|
|
|
|
|
|
|
|
|
- Fixed some other error message related bugs. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Assigning to slice didn't work. [Francois Pinard]
|
|
|
|
|
|
|
|
|
|
- Temp variables were being declared as extension
|
|
|
|
|
types and then being assigned PyObject *'s. All
|
|
|
|
|
Python temp vars are now declared as PyObject *.
|
|
|
|
|
[Francois Pinard]
|
|
|
|
|
|
|
|
|
|
0.5
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Algorithm for allocating temp variables redesigned
|
|
|
|
|
to fix various errors concerning temp
|
|
|
|
|
variable re-use. [Mark Rowe]
|
|
|
|
|
|
|
|
|
|
- Memory leak occured sometimes when an implicit
|
|
|
|
|
type test was applied to the result of an
|
|
|
|
|
expression. [Christoph Wiedemann]
|
|
|
|
|
|
|
|
|
|
- __set__ method of extension types had wrong
|
|
|
|
|
signature. [Josh Littlefield]
|
|
|
|
|
|
|
|
|
|
0.4.6
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Indexing multi-dimensional C arrays didn't
|
|
|
|
|
work. [Gary Dietachmayer]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.4.5
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- There is now a 'public' declaration for
|
|
|
|
|
making Pyrex-defined variables and functions
|
|
|
|
|
available to external C code. A .h file is
|
|
|
|
|
also generated if there are any public
|
|
|
|
|
declarations.
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Defining __len__/__getitem__ methods in an
|
|
|
|
|
extension class fills sq_length/sq_item slots
|
|
|
|
|
as well as mp_length/mp_subscript. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
- The Distutils extension now allows .c files
|
|
|
|
|
to be incorporated along with .pyx files.
|
|
|
|
|
[Modification to Distutils extension contributed
|
|
|
|
|
by Darrell Gallion]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Float literals without a decimal point
|
|
|
|
|
work again now. [Mike Rovner, Peter Lepage]
|
|
|
|
|
|
|
|
|
|
- Compiler crashed if exception value didn't
|
|
|
|
|
match function return type. [Michael JasonSmith]
|
|
|
|
|
|
|
|
|
|
- The setup.py file should now install the
|
|
|
|
|
Lexicon.pickle file in the right place.
|
|
|
|
|
[Patch supplied by David M. Cooke]
|
|
|
|
|
|
|
|
|
|
- Compiler crashed when compiling a C function that
|
|
|
|
|
returned an extension type.
|
|
|
|
|
[David M. Cooke]
|
|
|
|
|
|
|
|
|
|
- Anonymous enum types did not have C code
|
|
|
|
|
suppressed inside an extern-from block. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.4.4
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Tracebacks now extend into Pyrex function
|
|
|
|
|
calls and show line numbers in the Pyrex
|
|
|
|
|
source file.
|
|
|
|
|
|
|
|
|
|
- Syntax for float literals made more lenient
|
|
|
|
|
(no longer requires digits both before and
|
|
|
|
|
after the point). [Peter Lepage]
|
|
|
|
|
|
|
|
|
|
- Method calls can be made on string literals
|
|
|
|
|
(e.g. ",".join(x)). [Pedro Rodriguez]
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Incorrect refcount code generated when a
|
|
|
|
|
Python function needing argument type tests
|
|
|
|
|
had local Python variables. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
- 'self' parameter of __getitem__ method of
|
|
|
|
|
extension type had wrong implicit type. [Peter Lepage]
|
|
|
|
|
|
|
|
|
|
- Repaired breakage introduced by trying to
|
|
|
|
|
allow an empty parameter list to be written
|
|
|
|
|
as (void). No longer attempting to allow
|
|
|
|
|
this (too hard to parse correctly). [Peter Lepage]
|
|
|
|
|
|
|
|
|
|
- Found bug in Plex 1.1.2 which was the *real*
|
|
|
|
|
cause of the two-newlines-in-a-row problem.
|
|
|
|
|
Removed the Opt(Eol)+Str("\n") hacks in
|
|
|
|
|
the scanner which were working around this
|
|
|
|
|
before. [Pedro Rodriguez]
|
|
|
|
|
|
|
|
|
|
- __call__ special method of extension types
|
|
|
|
|
had wrong signature. [Peter Lepage]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.4.3
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New language features:
|
|
|
|
|
|
|
|
|
|
- For-from loop for iterating over integer
|
|
|
|
|
ranges, using pure C loop where possible.
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- sizeof() can now be applied to types as
|
|
|
|
|
well as variables.
|
|
|
|
|
|
|
|
|
|
- Improved handling of forward-declared
|
|
|
|
|
extension types.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Two newlines in a row in a triple quoted
|
|
|
|
|
string caused a parse error on some
|
|
|
|
|
platforms. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
- Fixed problem with break and continue in
|
|
|
|
|
the else-clause of a loop.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.4.2
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New language features:
|
|
|
|
|
|
|
|
|
|
- C functions can be declared as having an
|
|
|
|
|
exception return value, which is checked
|
|
|
|
|
whenever the function is called. If an
|
|
|
|
|
exception is detected inside a C function
|
|
|
|
|
for which no exception value is declared,
|
|
|
|
|
a warning message is printed and the
|
|
|
|
|
exception is cleared.
|
|
|
|
|
|
|
|
|
|
- Cascaded assignments (i.e. a = b = c
|
|
|
|
|
are now supported.
|
|
|
|
|
|
|
|
|
|
- Anonymous enum declarations are allowed,
|
|
|
|
|
for when you just want to declare constants.
|
|
|
|
|
|
|
|
|
|
- The C types "long long" and "long double"
|
|
|
|
|
are now understood. Also, "int" is optional
|
|
|
|
|
after "short" or "long".
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- A * argument in a function call can now be
|
|
|
|
|
any sequence, not just a tuple.
|
|
|
|
|
|
|
|
|
|
- A C char* or char[] will be turned into
|
|
|
|
|
a char by taking its first character if
|
|
|
|
|
used in a context where a char is required,
|
|
|
|
|
thus allowing a string literal to be used as
|
|
|
|
|
a char literal.
|
|
|
|
|
|
|
|
|
|
- C string * C int or vice versa is now
|
|
|
|
|
interpreted as Python string replication.
|
|
|
|
|
|
|
|
|
|
- Function arguments are checked for void or
|
|
|
|
|
incomplete type.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Non-external extension types show up in the
|
|
|
|
|
module dict once more (this got broken in
|
|
|
|
|
0.4.1).
|
|
|
|
|
|
|
|
|
|
- A spurious decref has been removed from the
|
|
|
|
|
runtime support code for the "import" statement.
|
|
|
|
|
Hopefully this will prevent the crashes some
|
|
|
|
|
people have been experiencing when importing
|
|
|
|
|
builtin modules. [Mathew Yeates]
|
|
|
|
|
|
|
|
|
|
0.4.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New language features:
|
|
|
|
|
|
|
|
|
|
- "ctypedef struct/union/enum/class" statements
|
|
|
|
|
added, for use in extern-from blocks when a
|
|
|
|
|
header file uses a ctypedef to declare a
|
|
|
|
|
tagless struct, union or enum type.
|
|
|
|
|
|
|
|
|
|
- "pass" allowed in an extern-from block.
|
|
|
|
|
|
|
|
|
|
- "cdef extern from *" for when you don't want
|
|
|
|
|
to specify an include file name.
|
|
|
|
|
|
|
|
|
|
- Argument names may be omitted in function
|
|
|
|
|
signatures when they're not needed.
|
|
|
|
|
|
|
|
|
|
- New reserved word NULL for the null C pointer.
|
|
|
|
|
|
|
|
|
|
Compiler enhancements:
|
|
|
|
|
|
|
|
|
|
- Lexicon is now picked in binary format, so
|
|
|
|
|
startup should be much faster on slower
|
|
|
|
|
machines.
|
|
|
|
|
|
|
|
|
|
- If Pyrex decides to rebuild the lexicon and
|
|
|
|
|
then finds that it can't write a pickle file,
|
|
|
|
|
it now prints a warning and carries on
|
|
|
|
|
instead of crashing.
|
|
|
|
|
|
|
|
|
|
- Chat about hash codes and lexicon pickling
|
|
|
|
|
now turned off by default except when creating
|
|
|
|
|
a new lexicon (which ought never happen now
|
|
|
|
|
unless you change the scanner).
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Modified the runtime support code for "import"
|
|
|
|
|
statements, hopefully fixing problem with using
|
|
|
|
|
a Pyrex module in conjunction with py2exe.
|
|
|
|
|
|
|
|
|
|
- DL_EXPORT now used in both the prototype and
|
|
|
|
|
definition of the module init function.
|
|
|
|
|
|
|
|
|
|
- Exception state is now saved and restored around
|
|
|
|
|
calls to an extension type __dealloc__ method,
|
|
|
|
|
to avoid screwing up if the object is deallocated
|
|
|
|
|
while an exception is being propagated.
|
|
|
|
|
|
|
|
|
|
- Making an attribute reference to a method of
|
|
|
|
|
an extension type caused a compiler crash.
|
|
|
|
|
|
|
|
|
|
- Doc string in new-style class definition
|
|
|
|
|
caused a run-time error.
|
|
|
|
|
|
|
|
|
|
- Insufficient parentheses were put around C type
|
|
|
|
|
casts.
|
|
|
|
|
|
|
|
|
|
- Constructors for extension types are now read-only
|
|
|
|
|
C global variables instead of entries in the
|
|
|
|
|
module dict. This change was needed to prevent
|
|
|
|
|
Numeric from blowing up due to touching its
|
|
|
|
|
typeobject before import_numeric() could be called.
|
|
|
|
|
|
|
|
|
|
0.4
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
- "cdef extern from" statement allows inclusion
|
|
|
|
|
of C header files to be specified, solving
|
|
|
|
|
a number of problems including:
|
|
|
|
|
- Clashes between Pyrex and C declarations,
|
|
|
|
|
due to "const" and other reasons
|
|
|
|
|
- Windows-specific features required in
|
|
|
|
|
function declarations
|
|
|
|
|
- Helping deal with types such as "size_t"
|
|
|
|
|
- Helping deal with functions defined as
|
|
|
|
|
macros
|
|
|
|
|
|
|
|
|
|
- Access to internals of pre-existing extension
|
|
|
|
|
types is now possible by placing an extension
|
|
|
|
|
type declaration inside a "cdef extern from"
|
|
|
|
|
block.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Error not reported properly when passing
|
|
|
|
|
wrong number of args to certain special
|
|
|
|
|
methods of extension types. [Mitch Chapman]
|
|
|
|
|
|
|
|
|
|
- Compile-time crash when defining an extension
|
|
|
|
|
type with a __hash__ method.
|
|
|
|
|
|
|
|
|
|
Minor enhancements:
|
|
|
|
|
|
|
|
|
|
- Hashing of the scanner source file made more
|
|
|
|
|
platform-independent, making spurious regeneration
|
|
|
|
|
of the pickle less likely.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.3.4
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
- Runtime crash when using * or ** args in
|
|
|
|
|
a method of an extension type fixed. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
- Compiler crash when using default argument
|
|
|
|
|
values in a method of a Python class. [Mike Rovner]
|
|
|
|
|
|
|
|
|
|
Enhancements:
|
|
|
|
|
|
|
|
|
|
- Type slots filled with functions from outside
|
|
|
|
|
the extension module are now initialised dynamically,
|
|
|
|
|
which should eliminate at least some of the
|
|
|
|
|
"initialiser is not constant" problems experienced
|
|
|
|
|
on Windows. [Marek Baczek]
|
|
|
|
|
|
|
|
|
|
- On Windows, __declspec(dllexport) is now used for
|
|
|
|
|
the module init func declaration (or should be --
|
|
|
|
|
I haven't tested this). [Marek Baczek]
|
|
|
|
|
|
|
|
|
|
- The compiler shouldn't attempt to rewrite the
|
|
|
|
|
Lexicon.pickle file unless the source has been
|
|
|
|
|
changed (hashing is used now instead of comparing
|
|
|
|
|
timestamps). So there should be no problem any more
|
|
|
|
|
with installing Pyrex read-only.
|
|
|
|
|
|
|
|
|
|
0.3.3
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
* A void * can be assigned from any other
|
|
|
|
|
pointer type.
|
|
|
|
|
* File names in error messages no longer
|
|
|
|
|
quoted (this was apparently confusing some
|
|
|
|
|
editors). [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
* Reference to a struct member which is an
|
|
|
|
|
array is coerced to a pointer. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
* Default argument values did not work
|
|
|
|
|
in methods of an extension type. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
* Single or double quote characters in a
|
|
|
|
|
triple-quoted string didn't work. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
* Using *args in a function definition
|
|
|
|
|
sometimes caused a crash at runtime. [Matthew Mueller]
|
|
|
|
|
|
|
|
|
|
* A hack is included which tries to make
|
|
|
|
|
functions in Python.h which use 'const'
|
|
|
|
|
accessible from Pyrex. But it doesn't
|
|
|
|
|
work on all platforms. Thinking about a
|
|
|
|
|
better solution.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* Comment containing Pyrex version number
|
|
|
|
|
and date/time at top of generated C file. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.3.2
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
* The & operator works again. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
* The & operator had incorrect precedence.
|
|
|
|
|
|
|
|
|
|
* "SystemError: 'finally' pops bad exception"
|
|
|
|
|
under some circumstances when raising an
|
|
|
|
|
exception. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
* Calling a Python function sometimes leaked
|
|
|
|
|
a reference.
|
|
|
|
|
|
|
|
|
|
* Crash under some circumstances when casting
|
|
|
|
|
a Python object reference to a C pointer type.
|
|
|
|
|
[Michael JasonSmith]
|
|
|
|
|
|
|
|
|
|
* Crash when redeclaring a function. [Matthias Baas]
|
|
|
|
|
|
|
|
|
|
* Crash when using a string constant inside
|
|
|
|
|
a Python class definition. [Mike Rovner]
|
|
|
|
|
|
|
|
|
|
* 2-element slice indexing expressions. [Mike Rovner]
|
|
|
|
|
|
|
|
|
|
* Crash when encountering mixed tabs and
|
|
|
|
|
spaces. [Mike Rovner]
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* A wider variety of constant expressions is
|
|
|
|
|
now accepted for enum values, array
|
|
|
|
|
dimensions, etc. [Mike Rovner]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.3.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* More special methods for extension types:
|
|
|
|
|
__delitem__, __delslice__, __getattr__,
|
|
|
|
|
__setattr__, __delattr__
|
|
|
|
|
|
|
|
|
|
* Module-level variable of a Python object type
|
|
|
|
|
declared with 'cdef' is private to the module, and
|
|
|
|
|
held in a C variable instead of the module dict.
|
|
|
|
|
|
|
|
|
|
* External C functions with variable argument lists
|
|
|
|
|
can be declared and called.
|
|
|
|
|
|
|
|
|
|
* Pyrex-defined Python functions can have default
|
|
|
|
|
argument values and * and ** arguments, and can be
|
|
|
|
|
called with keyword arguments.
|
|
|
|
|
|
|
|
|
|
* Pointer-to-function types can be declared.
|
|
|
|
|
|
|
|
|
|
* Pyrex now supports a declaration syntax that
|
|
|
|
|
C doesn't! Example:
|
|
|
|
|
|
|
|
|
|
cdef (int (*)()) foo() # function returning a function ptr
|
|
|
|
|
|
|
|
|
|
* There is now a ctypedef statement.
|
|
|
|
|
|
|
|
|
|
* Extension types can now be forward-declared.
|
|
|
|
|
|
|
|
|
|
* All permutations of (non-Unicode) string literals
|
|
|
|
|
and escape codes should work now.
|
|
|
|
|
|
|
|
|
|
* Hex and octal integer literals.
|
|
|
|
|
|
|
|
|
|
* Imaginary number literals.
|
|
|
|
|
|
|
|
|
|
* Docstrings are now supported.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
* Type tests are performed when using a Python object
|
|
|
|
|
in a context requiring a particular extension type.
|
|
|
|
|
|
|
|
|
|
* Module-level variable holding the type object
|
|
|
|
|
of an extension type had incorrect type.
|
|
|
|
|
|
|
|
|
|
0.3
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* Extension types! Yay!
|
|
|
|
|
|
|
|
|
|
0.2.2
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
* Fixed error message generation again after a previous
|
|
|
|
|
bug was accidentally re-indroduced.
|
|
|
|
|
|
|
|
|
|
* Removed the declaration of isspace() from the code
|
|
|
|
|
generated for print statement support (it's not needed
|
|
|
|
|
and was conflicting with the system-supplied one on
|
|
|
|
|
some platforms).
|
|
|
|
|
|
|
|
|
|
0.2
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
New features:
|
|
|
|
|
|
|
|
|
|
* Executable statements are now allowed at the
|
|
|
|
|
top level of a module.
|
|
|
|
|
|
|
|
|
|
* Python class definitions are now supported, with
|
|
|
|
|
the following limitations:
|
|
|
|
|
|
|
|
|
|
- Class definitions are only allowed at the top
|
|
|
|
|
level of a module, not inside a control structure
|
|
|
|
|
or function or another class definition.
|
|
|
|
|
|
|
|
|
|
- Assigning a Pyrex-defined Python function to a
|
|
|
|
|
class attribute outside of the class definition
|
|
|
|
|
will not create a method (because it's not an
|
|
|
|
|
interpreted Python function and therefore
|
|
|
|
|
won't trigger the bound-method creation magic).
|
|
|
|
|
|
|
|
|
|
- The __metaclass__ mechanism and the creation of
|
|
|
|
|
new-style classes is not (yet) supported.
|
|
|
|
|
|
|
|
|
|
* Casting between Python and non-Python types is
|
|
|
|
|
better supported.
|
|
|
|
|
|
|
|
|
|
Bug fixes:
|
|
|
|
|
|
|
|
|
|
* Fixed bug preventing for-loops from working.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.1.1
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
* I've discovered a flaw in my algorithm for releasing
|
|
|
|
|
temp variables. Fixing this properly will require some
|
|
|
|
|
extensive reworking; I've put in a hack in the meantime
|
|
|
|
|
which should work at the cost of using more temp variables
|
|
|
|
|
than are strictly necessary.
|
|
|
|
|
|
|
|
|
|
* Fixed bug preventing access to builtin names from
|
|
|
|
|
working. This should also have fixed the import
|
|
|
|
|
statement, but I haven't tested it.
|
|
|
|
|
|
|
|
|
|
* Fixed some errors in __Pyx_GetExcValue.
|
|
|
|
|
|
|
|
|
|
* Fixed bug causing boolean expressions to malfunction
|
|
|
|
|
sometimes.
|