From a5e761dddb6b090b233aebe29dc30ebfbc058dab Mon Sep 17 00:00:00 2001 From: Guillaume Maudoux Date: Sun, 13 Nov 2016 17:06:04 +0100 Subject: [PATCH] Fix comments parsing Fixed the parsing of multiline strings ending with an even number of stars, like /** this **/. Added test cases for comments. --- src/libexpr/lexer.l | 2 +- tests/lang/eval-okay-comments.exp | 1 + tests/lang/eval-okay-comments.nix | 59 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/lang/eval-okay-comments.exp create mode 100644 tests/lang/eval-okay-comments.nix diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index f3660ab4..3ac7ce72 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -189,7 +189,7 @@ or { return OR_KW; } [ \t\r\n]+ /* eat up whitespace */ \#[^\r\n]* /* single-line comments */ -\/\*([^*]|\*[^\/])*\*\/ /* long comments */ +\/\*([^*]|\*+[^*/])*\*+\/ /* long comments */ . return yytext[0]; diff --git a/tests/lang/eval-okay-comments.exp b/tests/lang/eval-okay-comments.exp new file mode 100644 index 00000000..7182dc2f --- /dev/null +++ b/tests/lang/eval-okay-comments.exp @@ -0,0 +1 @@ +"abcdefghijklmnopqrstuvwxyz" diff --git a/tests/lang/eval-okay-comments.nix b/tests/lang/eval-okay-comments.nix new file mode 100644 index 00000000..cb2cce21 --- /dev/null +++ b/tests/lang/eval-okay-comments.nix @@ -0,0 +1,59 @@ +# A simple comment +"a"+ # And another +## A double comment +"b"+ ## And another +# Nested # comments # +"c"+ # and # some # other # +# An empty line, following here: + +"d"+ # and a comment not starting the line ! + +"e"+ +/* multiline comments */ +"f" + +/* multiline + comments, + on + multiple + lines +*/ +"g" + +# Small, tricky comments +/**/ "h"+ /*/*/ "i"+ /***/ "j"+ /* /*/ "k"+ /*/* /*/ "l"+ +# Comments with an even number of ending '*' used to fail: +"m"+ +/* */ /* **/ /* ***/ /* ****/ "n"+ +/* */ /** */ /*** */ /**** */ "o"+ +/** **/ /*** ***/ /**** ****/ "p"+ +/* * ** *** **** ***** */ "q"+ +# Random comments +/* ***** ////// * / * / /* */ "r"+ +# Mixed comments +/* # */ +"s"+ +# /* # +"t"+ +# /* # */ +"u"+ +# /*********/ +"v"+ +## */* +"w"+ +/* + * Multiline, decorated comments + * # This ain't a nest'd comm'nt + */ +"x"+ +''${/** with **/"y" + # real + /* comments + inside ! # */ + + # (and empty lines) + +}''+ /* And a multiline comment, + on the same line, + after some spaces +*/ # followed by a one-line comment +"z" +/* EOF */