about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-09-01T12·04+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-09-01T12·04+0000
commitde90fdf908f2504e1a89a5d4660552cbcc1a15d5 (patch)
tree7f7670b5bc4a157eb5466f38e03c8fe2fc152e3b
parentc9586b6c3f32b22eec8791fd9b49c81ec3f5fcf6 (diff)
* Allow "$" in strings as long as they are not followed by "{". (Too
  bad flex doesn't have lexical restrictions, the current solution
  isn't quite right...)

-rw-r--r--src/libexpr/lexer.l6
-rw-r--r--tests/lang/eval-okay-string.exp2
-rw-r--r--tests/lang/eval-okay-string.nix1
3 files changed, 7 insertions, 2 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l
index 892543ec2eeb..fb19e16b457c 100644
--- a/src/libexpr/lexer.l
+++ b/src/libexpr/lexer.l
@@ -77,7 +77,11 @@ inherit     { return INHERIT; }
             }
 
 \"          { BEGIN(STRING); return '"'; }
-<STRING>([^\$\"\\]|\\.)+ {
+<STRING>([^\$\"\\]|\$[^\{\"]|\\.)+ {
+/* !!! Not quite right: we want a follow restriction on "$", it
+   shouldn't be followed by a "{".  Right now "$\"" will be consumed
+   as part of a string, rather than a "$" followed by the string
+   terminator.  Disallow "$\"" for now. */
               yylval->t = unescapeStr(yytext); /* !!! alloc */ 
               return STR;
             }
diff --git a/tests/lang/eval-okay-string.exp b/tests/lang/eval-okay-string.exp
index dd0e5e248d19..335e3281e359 100644
--- a/tests/lang/eval-okay-string.exp
+++ b/tests/lang/eval-okay-string.exp
@@ -1 +1 @@
-Str("foobar/a/b/c/d/foo/xyzzy/foo.txt/../foo/x/yescape: \"quote\" \n \\end\nof\nlinefoobarblaat")
+Str("foobar/a/b/c/d/foo/xyzzy/foo.txt/../foo/x/yescape: \"quote\" \n \\end\nof\nlinefoobarblaatfoo$bar")
diff --git a/tests/lang/eval-okay-string.nix b/tests/lang/eval-okay-string.nix
index f2452e85745b..086ba4bf92a8 100644
--- a/tests/lang/eval-okay-string.nix
+++ b/tests/lang/eval-okay-string.nix
@@ -7,3 +7,4 @@
 of
 line"
   + "foo${if true then "b${"a" + "r"}" else "xyzzy"}blaat"
+  + "foo$bar"