We had an experimental capabilities allowing something like
child (A or new something ())
to work so that so "A or new someting ()) would first be evaluated on all
child nodes without the allocator as to try to find a match without
allocating, then with the allocator. This ended up only serving very
specific cases - being overall confusing and complicating the code. This
capability is now removed, and the above can be easily refactored into a
more explicit expression:
child (A) or child (new something ())
This is a partial implementation, requires support to libadalang array to support
the version returning arrays.
Properties were handled as fields. They are now implemented as function. This required
to update various places where properties were used like predicates, and use the
filter function instead.
Filter is fixed, doesn't fail anymore in case of a non-matching prefix in a matching
call, and properly sets 'it' and reset the yield callback when matching the expression.
Regular expressions were possibly interrupting the outer iteration when matching
before generation of values - now fixed.
The usage of the word 'self' to refer to the current iteration became increasingly
confusing with the usual OOP counterpart, in particular because its value can change
in a single expression, independendly of the surrounding object. See previous check
in that uncovered its usage in the fold function.
Allowing to use @ to update currently updated value.
Also improved performances of Top_Frame & Parent_Frame, using direct references
instead of expensive function calls.