This document contains details of the various releases and their release dates.
Dates are in the format yyyy-mm-dd
.
Certain platforms apparently no longer move compiled extensions into the lib/ directory. The code has been updated to use "require" instead to work around this problem.
See commit b27fe7cc109a39184ac984405a1e452868f3fac9 for more information.
Similar to Oga (and my other projects) the license of ruby-ll has been changed to MPL 2.0.
See ruby-ll commit 59928ade94b9b849ffa827cb482662323066d041 and Oga commit https://github.com/YorickPeterse/oga/commit/0a7242aed44fcd7ef18327cc5b10263fd9807a35 for more information.
This release adds Windows support for ruby-ll by tweaking the compilation process of the native extensions. Tests are run on AppVeyor (https://ci.appveyor.com/project/YorickPeterse/ruby-ll) to ensure they always pass.
Support was added for the ?
operator. This operator can be used to indicate a
certain rule/terminal is optional.
This release fixes a bug in the parser that would occur when parsing input such as the following:
A = B (C D)? E;
This would previously throw a syntax error.
This release contains some changes that are not backwards compatible, hence the major version increase.
Grammars can now use two new operators: *
and +
. The star operator (*
)
defines that a set of terminals/rules can occur 0 or more times while the plus
operator (+
) indicates that something occurs 1 or more times. These operators
don't rely on recursion and thus are left-associative.
Branches containing only a single step without any custom actions now only
return the first step's value instead of an Array containing the value. In other
words, previously ruby-ll would generate an action returning val
whereas now
it returns val[0]
. This can break existing grammars, hence the major version
bump.
As an example:
A = B;
Previously A would essentially be set to [B]
whereas now it's just set to B
.
This means you no longer have to do this:
A = B { val[0] };
Some of the C code used for the driver has been cleaned up to use correct CAPI datatypes.
The function ll_driver_config_mark()
has been removed from the C extension as
it would occasionally trigger a segmentation fault. See commit
667339611d05fa58b60db58a7135156456dbd504 for more information.
The file ll/setup
now also loads LL::ConfigurationCompiler
to ensure that
the TYPES
array (and thus LL::Driver#id_to_type
) can be used outside of
ruby-ll itself.
Parser errors produced by ruby-ll's own parser/grammar now include the line number/column number whenever possible.
This release changes the way error handling is done. Instead of having multiple,
separate error callbacks there's now only one error callback:
LL::Driver#parser_error
. See commit 22b6081e37509d10e3b31d6593b0a7f2e5fd7839
for more information.
While this change technically breaks backwards compatibility I do not consider the old error handling system part of the public API, mainly due to it being extremely painful to use.
The first public release of ruby-ll!