aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Maudoux <layus.on@gmail.com>2016-11-13 17:06:04 +0100
committerGuillaume Maudoux <layus.on@gmail.com>2016-11-13 17:20:34 +0100
commita5e761dddb6b090b233aebe29dc30ebfbc058dab (patch)
tree58f947476eca68487bc924c420f6a94d5fa2baaa
parentdd77f7d5931e500585b6539b52ef5a5f3b549a4e (diff)
Fix comments parsing
Fixed the parsing of multiline strings ending with an even number of stars, like /** this **/. Added test cases for comments.
-rw-r--r--src/libexpr/lexer.l2
-rw-r--r--tests/lang/eval-okay-comments.exp1
-rw-r--r--tests/lang/eval-okay-comments.nix59
3 files changed, 61 insertions, 1 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l
index f3660ab43..3ac7ce723 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 000000000..7182dc2f9
--- /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 000000000..cb2cce218
--- /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 */