From de90fdf908f2504e1a89a5d4660552cbcc1a15d5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 1 Sep 2006 12:04:06 +0000 Subject: [PATCH] * 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...) --- src/libexpr/lexer.l | 6 +++++- tests/lang/eval-okay-string.exp | 2 +- tests/lang/eval-okay-string.nix | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index 892543ec2..fb19e16b4 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -77,7 +77,11 @@ inherit { return INHERIT; } } \" { BEGIN(STRING); return '"'; } -([^\$\"\\]|\\.)+ { +([^\$\"\\]|\$[^\{\"]|\\.)+ { +/* !!! 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 dd0e5e248..335e3281e 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 f2452e857..086ba4bf9 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"