* Also enhanced reporting error exit reporting through the scons logger to provide
the exception in the compilation report.
* More error exits in scons should do this.
* New black removes a few leading new lines in blocks, so many
files changed in that way.
* The "pygments" has a vulnerability, but updating that and the
restructured text checking stuff did not actually matter at
all.
* Bumped needed version for development to 3.8, since black does
not do 3.7 anymore, and it's old enough.
* All expression nodes now use a dedicated generated children mixin
class, aimed at optimal use.
* Some select expression nodes now use dedicated base classes with
automatic computations done in there.
* When cloning nodes or getting visitable nodes, more more compact
code is used that should perform better.
* Named chilren now have types, and "tuple" is handled explicitely
without checking values for their type, so updates, iteration etc.
is all directl.
* Remove useless checker for "kw_defaults" from function creation nodes,
they are only ever "None" when the node is created. No need to check
afterwards anymore.
* Only when a function node is created, is there a chance for "kw_defaults"
to be empty dict, so use a factory function instead.
* With useless checkers removed, generated children mixins now do apply
the checkers statically rather than checking on every update if there
is one, and the checkers dictionary per expression can be dropped as
result, making things perform much better for child replacement.
* Attach type shapes to methods specs for use in attribute node
generation, such that the proper mixin class for the result
type shape can be chosen automatically, but we do have some types,
that depend on Python version looking at it, and won't be suitable yet.
* Factories for nodes are now detected automatically in node generation,
making them easier to use.
* Added support for "importlib.metadata.entry_points" and its
backport variant "importlib_metadata" too.
* Added operations for all "bytes" methods as well, such that the
existing few ones are automatically generated as well.
* Added "auto_compute" for annotations of nodes that never change and do
annotate and potentially raise an exception or not. This will allow to
do stub method implementations, and rather have the base class contain
this directly.
* The "iter" node for 2 arguments was not annotating its exception exit,
which was discovered when looking for a boiler plate node to migrate
to "auto_compute" which then of course resolves the bug.
* Make sure we pass tuple values when creating nodes that have children
with that type. We created node lists only to always convert them to
tuple value when the node is created. This is now avoided in many
cases.
* Sequences had dead attribute "sequence_kind", removed that attribute.
* Made a new sequence mixin for reuse in "importlib.metadata.EntryPoints"
values which are more or less a sequence derived class.
* Made dictionary mixin for reuse in "importlib.metadata.SelectableGroups"
as these are more or less a dict derived class.
* Replaced "willRaiseException" with "willRaiseAnyException" which will be
more accurate and faster, and matches what the result of the function
is more closely anyway. We do not ask the other question at all yet.
* Remove useless raise checks in sequence making nodes, they were
repeating the effort done in the base class for no good reason,
potentially wasting a lot of time.
* Made meta data using test cover the new entry_points method without
arguments at least.
* This adds "str.expandtabs", "str.translate", "str.ljust",
"str.rjust", "str.center", "str.zfill", and "str.splitlines".
* While these are barely performance relevant, it's nice to have
one type, str, complete at least.
* Firstly , add all methods with no arguments, as these are very generic
to add, introduced a base class for them, where we know they all have
no effect or raise, as these functions are all guarantueed to succeed.
* This covers "str.capitalize", "str.upper", "str.lower", "str.swapcase",
"str.title", "str.isalnum", "str.isalpha", "str.isdigit", "str.islower",
"str.isupper", "str.isspace", "str.istitle" functions.
* Also add support for 'str.index', 'str.rindex' which is very similar
to 'str.find', just may raise an exception.
* Also add support for 'str.split' which will be used sometimes for code
needed to be compile time computed.
* Also add generated test to cover all str methods easily.
* This is of course Python2 only, and there is old code still using it.
* The dictionary "in" node was made reusable to make this easy, just
different evaluation order.
* Generation of nodes wasn't prepared for argument count specific functions yet.
* Add coverage of unhashable values at runtime and compile time to dict
methods test.
* This is in preparation for 3.10 which will fail to work that work.
* Extended numeric values to be hexadecimal.
* Using tuples over strings in testing.
* When runtime errors for these operations occur, we report the wrong
operator, namely the binary, instead of the in-place from the source,
but this doesn't really matter much.
* All helpers now have a target type added, mostly OBJECT now, but e.g.
also NBOOL and CBOOL can be used.
* The helpers for operations are now built with factory functions for their
consistency
* Added shapes for all operations for the common types.
* Added dedicated nodes for all in-place operations solving a TODO.
* Inplace operations to be created are now derived from the binary
operations.
* Conversions for missing target types instead of falling back to
most generic helper.
* Converted manual comparison helpers to new Jinja template for
generating code automatically.
* Added optimization for more operations and their types, e.g. tuples,
floats, and more operations.
* More generalized templates to allow more C types that are not objects.
* Added tests to cover in-place operations
* Test infrastructure for generated tests from Jinja2 templates.
* Type shapes are now all instances, avoid mixing classes and instances
for clarity of code and correctness.
* Enable warnings for all operations in case of specific shape
combinatations not defined.
* Some corrections to boolean C target type code, now applied in many
more test cases.
* Proper void C type added, to be used in code specialization later.
* This adds support for a lot more operations, striving to become
more complete in this regard.
* Also give up on special casing node class names for "or", "and", and
"not", there really is no point, and the new operations were going
to be affected.