12 KiB
Changelog
6.0.2
Mar 23, 2023
- Switch to
nom-7.
6.0.1
Jul 11, 2021
- Better scheme for parenthesis generation in the GLSL transpiler.
- Fix matrices types in the GLSL transpiler.
- Fix end-of-line parser, which now accepts CR LF too.
6.0
Dec 7th, 2020
- Change the meaning of
VisitorandHost. They now take the AST nodes by simple references (&) and not via mutable references (&mut) anymore. This will allow people to use visitors in much more contexts. - Add
VisitorMutandHostMutto visit AST nodes mutably. These correspond to the previous (version<6.0)VisitorandHosttraits. If you were using them and require mutability, feel free to simply switch toVisitorMutandHostMut.
5.0.2
Nov 1st, 2020
- Bump
nom-6.0.
5.0.1
Aug 12th, 2020
- Fix float / double literal parsing priority. Floats are parsed first now in case of a polymorphic constant.
5.0.0
Jul 27th, 2020
- Fix array specifiers by splitting the
ArraySpecifiertype into two types:ArraySpecifier, which holds a non-empty list ofArraySpecifierDimension.ArraySpecifierDimension, which is the “old”ArraySpecifier. This change allows for multidimensional array specifiers.
Migration guide
- If you were using array specifiers, you need to wrap them inside an
ArraySpecifierDimensionand wrap it in aArraySpecifier { dimensions: NonEmpty(vec![here]) }expression, wherehereis your specifier.
4.1.1
Wed Jul 1st 2020
- Fix the identifier parser, that previously failed to parse identifiers starting with an
underscore (
_) while it is permitted (chapter 3.7 of the GLSLang spec). - Fix associativity for logical binary operators (
||,&&).
4.1
Fri Jun 19th 2020
- Implement
std::error::Errorfor error types.
4.0.3
Fri Mar 6th 2020
- Move all the unit tests code into their ow module to prevent rustc from parsing them if we don’t build with tests.
4.0.2
Mon 10th Feb 2020
- Remove the
lexicalfeature fromnom. It’s useful only when using functions such as thefloatcombinator, which we don’t use.
4.0.1
Tue 21st Jan 2020
- Fix a bug occurring in the function-like
#defineparser (i.e.#define foo(x) (y)) that would prevent the use of whitespaces in the argument list.
4.0
Mon 6th Jan 2020
Major changes
- Add support for
attributeandvaryingkeyword as a backward-compatible parser. - Fix binary operator associativity. They were (erroneously) right-associative. They’re now parsed as left-associative.
3.0
Wed 14th Nov 2019
Major changes
JumpStatement::Returnnow takes an optionalExprinstead of anExprdirectly. That allows for parsing statements such asreturn;, which should have been supported from the beginning.- Support for missing preprocessor directives:
#if.#ifdef.#ifndef.#elseif.#else.#endif.#error.#include.#line.#pragma.#undef.
Patch changes
- Add a
rustfmt.tomlto reformat everything and stay consistent. If you want contribute, ensure you are correctly usingrustfmt(either by runningcargo fmtbefore submitting a PR or by configuring your editor to format the code for you). This is important, as not respecting the formatting would make your contribution impossible to merge due to a CI check. - Support for multiline annotations (
\). Multiline annotations are currently supported as part of spaces — i.e. you cannot use them to break an identifier on two lines for instance. This choice makes it faster to parse without too much compromises (after all,\is mostly used in CPP directives in GLSL). - Fix a bug with recoverable parsers that would produce parent parsers to ignore GLSL grammar errors. That fix also implies a boost in performance due to short-circuiting optimizations.
2.0.1
Fri 8th Nov 2019
- Improve performance of expression parsers.
2.0
Thu 24th Oct 2019
Major changes
- Add
ShaderKind::Compute. - Remove
NonEmpty::from_iterandTranslationUnit::from_iteras they were deprecated. Use*::from_non_empty_iterinstead.
Patch changes
- Fix tokenizer of
Block. - Fix a bug while parsing floating-point numbers.
- Reformat with
rustfmt.
1.2
Wed 18th Sep 2019
Deprecations
NonEmpty::from_iterandTranslationUnit::from_iterare deprecated in favor of*::from_non_empty_iter.
Minor changes
- Add binary SPIR-V transpilation. That enables to transpile GLSL directly into a SPIR-V buffer.
- Add
NonEmpty::from_non_empty_iterandTranslationUnit::from_non_empty_iter.
1.1.1
Tue 17th Sep 2019
- Update internal code for Rust edition 2018.
1.1
Tue 30th of July 2019
- Add the
ShaderStagetype alias toTranslationUnit. - Enhance the front documentation to showcase how to use how to use the crate.
1.0.2
Tue 23rd of July 2019
- Change the description of the project and update documentation.
1.0.1
Tue 23rd of July 2019
- Change the
external_declarationparser so that it can also accept GLSL460. That should be a breaking change because now, GLSL450 formatted input accepts feature from GLSL460, which shouldn’t be allowed. Nevertheless, the added feature (being able to use semicolons (;) on empty lines at top-level) is not really an interesting property and no breakage should happen.
1.0
Thu 18th of July 2019
- Migrate all parsers to nom-5.
- Improve and add unit and integration tests.
- Improve overall documentation.
- Enhance some allocation scheme (removed them by using more adapted parsers).
- Completely remove the byte (
&[u8]) parsing. That was a bad idea, for both its impractical aspect and error removing. Parsing is done on string slices now (&str).
0.13.5
Sun 9th of December 2018
- Add the SPIR-V transpiler. Currently, it’s feature-gated and very experimental. Feel free to try and provide feedback about it.
- Add simple accessors for
ParseResult. - Fix a typo in the documentation of syntax.
- Add some unit and integration tests.
- Add
Identifier::as_strandTypeName::as_str
0.13.4
Wed 25nd of November 2018
- Add
NonEmpty::pushandNonEmpty::pop. - Implement
DerefandDerefMutforTranslationUnit.
0.13.3
Wed 24nd of November 2018
- Add
NonEmpty::from_iterandTranslationUnit::from_iter. - Implement
IntoIteratorforNonEmptyandTranslationUnit.
0.13.2
Wed 22nd of November 2018
- Fix a typo in documentation.
0.13.1
Wed 22nd of November 2018
- Fix a link in documentation.
0.13
Wed 21st of November 2018
- Update/reset hyperlinks in all the documentation for types, traits, methods, etc.
- General enhancement of the documentation.
ExternalDeclaration::new_structcan now fail. Check the doc for further details.NonEmpty,IdentifierandTypeNameandTranslationUnitare now plain types and not aliases anymore.- Add AST visitors. Visitors allow for traversing through an AST and on-the-fly mutation, filtering, etc.
- The
#definepreprocessor pragma is now supported in a limited form (it can only be used in the global scope).
0.12
Sun 11th of November 2018
- Fix the type of identifier stored in
Block: it now uses the new encoding for arrayed identifiers. Blockparsers update for the arrayd identifier change.
0.11
Sat 10th of November 2018
- Add helper functions to build objects form the
syntaxmodule. Those are intended to be a simple way to build ASTs out of Rust code instead of parsing. - Enhance the documentation of the
Preprocessortype.
0.10.1
Fri 2nd of November 2018
- Add some missing implementors of
Parsefor types fromglsl::syntax.
0.10
Fri 2nd of November 2018
- Hide the
parsersmodule. It’s not exposed anymore as it was mostly nom parsers and we don’t like leaking internals. - Introduce the
Parsertrait, acting as an abstraction over the internal parsers. Implementors provide a type-driven parsing experience that is very similar to the one as FromStr. This change is actually mandatory for the glsl-quasiquote crate’sglsl!proc-macro to allow people use it for any GLSL item (and not onlyTranslationUnit). - Enhance the overall documentation.
0.9.2
Wed 3rd of October 2018
- Fix GLSL transpiled representation of
IVec*. It was plain wrong.
0.9.1
Sat 7th of July 2018
- Fix unit testing in transpilers.
0.9
Sat 7th of July 2018
- Big cleanup of the module hierarchy.
- Enhanced the documentation.
0.8.1
Sun, 17th of June 2018
- Add the
README.mdpath to theCargo.tomlmanifest.
0.8
Sun 17th of June 2018
This version introduces breaking changes because public types used in return positions have changed.
These concern only intermediate nom functions, so if you do not make a fancy use of this crate,
you souldn’t have to worry too much when migrating.
- Fix the roundtrip issue with the GLSL writer (precedence wasn’t correctly respected).
- Simplify internal code.
- Error instead of panicking when parsing overflowing integer literals.
- Fix panic trying to parse literals starting with whitespace.
- Add fuzzing to find out panics.
0.7.2
Wed 13th of December 2017
- Fix the
show_exprwhen theExpris aExpr::UIntConst.
0.7.1
Mon 20th of November 2017
std::error::Erroris now implemented forParseError.
0.7
Wed 27th of September 2017
- Add support for postfix expressions as function identifiers.
0.6.5
Mon 4th of September 2017
- Fix the formatting of floating values when the fractional part is
0.
0.6.4
Mon 4th of September 2017
- Fix the output for
show_struct_specifier.
0.6.3
Mon 4th of September 2017
- Fix the output for
show_struct_specifier.
0.6.2
Mon 4th of September 2017
- Remove a warning.
0.6.1
Mon 4th of September 2017
- Fix
show_struct_specifier.
0.6
Fri 1st of September 2017
- The
TypeSpecifiertype was wrong as it didn’t carry anyArraySpecifierinformation while the GLSL specification’s grammar about type specifiers states they should. Fixed.
0.5
Mon 7th of August 2017
- The
parseandparse_strfunctions now take as second argument the parser to run. This enables using those functions and all the neat logic the wrap in dependent projects.
0.4.2
Fri 4th of August 2017
- A GLSL writer is now available.
- Some parsers yield non-empty list of syntax trees. Those had the incorrect
Vectype. They were replaced byNonEmpty, which is an alias toVec, but carry the semantic that it has at least one element in it.
0.4.1
Thu 3rd of August 2017
- Uni/multi-line comments are now supported.
0.4
Wed 2nd of August 2017
- The
Declaration::Blockvariant was refactored for a better usage. - Dot field selections and, in a mory general way, postfix expressions completely fixed. The
syntaxmodule was altered to make it easier to work with dot field selection. Also related, the function identifier syntax is now isomorphic to an identifier.
0.3.1
Tue 1st of August 2017
- Fix the
preprocessorparser so that it eats surrounding blanks.
0.3
Mon 31st of July 2017
- Add a very minimalistic yet working preprocessor. It parses
#versionand#extensioncommands. Those have to be declared at the top of your file, even though this implementation accepts them at any place an external declaration could be defined. Feel free to submit a PR if you want to change that behavior, I don’t really mind. - Enhance the runtime error reporting. It’s not perfect, but it’s way better than before!
voidis now recognized asTypeSpecifier::Voidinstead of the erroneousTypeSpecifier::TypeName("void").
0.2.2
Mon 31st of July 2017
- The
layoutparser had a nasty bug that would treat a list of key-value pairs as an expression assignment. This was fixed and it now treats it as a list of pairs of identifier associated with a possible constant expression. - The
StructFieldSpecifiertype and its associated parser were wrong. Was missing:- the type qualifier
- for each identifier defined in the field specifier, its optional array specifier, as in
float foo[3];orvec3 bar[];for unsized ones.
0.2.1
Sun 30th of July 2017
- More documentation to help people to get their feet wet.
0.2
Sat 29th of July 2017
- The whole parsing API is public.
0.1
- Initial revision.