This release 0.2.4 is likely the last 0.2.x release, as it's the one that achieved feature parity with CPython 2.6, which was the whole point of the release series, so time to celebrate. I have stayed away (mostly) from any optimization, so as to not be premature.
From now on speed optimization is going to be the focus though. Because right now, frankly, there is not much of a point to use Nuitka yet, with only a minor run time speed gain in trade for a long compile time. But hopefully we can change that quickly now.
The use of exec in a local function now adds local variables to scope it is in.
The same applies to
from module_name import *which is now compiled correctly and adds variables to the local variables.
UnboundLocalErrorwhen deleting a local variable with
NameErrorwhen deleting a global variable with
Read of to uninitialized closure variables gave
UnboundLocalErroris correct and raised now.
There is now a dedicated pass over the node tree right before code generation starts, so that some analysis can be done as late as that. Currently this is used for determining which functions should have a dictionary of locals.
Checking the exported symbols list, fixed all the cases where a
staticwas missing. This reduces the "module.so" sizes.
With gcc the "visibility=hidden" is used to avoid exporting the helper classes. Also reduces the "module.so" sizes, because classes cannot be made static otherwise.
Added "DoubleDeletions" to cover behaviour of
del. It seems that this is not part of the CPython test suite.
The "OverflowFunctions" (those with dynamic local variables) now has an interesting test, exec on a local scope, effectively adding a local variable while a closure variable is still accessible, and a module variable too. This is also not in the CPython test suite.
Restored the parts of the CPython test suite that did local star imports or exec to provide new variables. Previously these have been removed.