aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/parser.y
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2015-02-19 08:05:16 -0500
committerShea Levy <shea@shealevy.com>2015-02-19 08:05:16 -0500
commite0953d53de1dbb89ef0ff779e53ffdb0d988e806 (patch)
treefdace2efd90da8735d3abb36a16f65aad9b28f79 /src/libexpr/parser.y
parent1816ac0db1817642e27ef1544c7d9b904dbb670a (diff)
Allow the leading component of a path to be a ~
Diffstat (limited to 'src/libexpr/parser.y')
-rw-r--r--src/libexpr/parser.y10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index 7d877cd67..f4648b902 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -268,7 +268,7 @@ void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, const char * err
%token <id> ID ATTRPATH
%token <e> STR IND_STR
%token <n> INT
-%token <path> PATH SPATH
+%token <path> PATH HPATH SPATH
%token <uri> URI
%token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL OR_KW
%token DOLLAR_CURLY /* == ${ */
@@ -376,6 +376,14 @@ expr_simple
$$ = stripIndentation(CUR_POS, data->symbols, *$2);
}
| PATH { $$ = new ExprPath(absPath($1, data->basePath)); }
+ | HPATH {
+ auto path = string{$1 + 1};
+ $$ = new ExprConcatStrings(CUR_POS, false, new vector<Expr *>{
+ new ExprPath("/"),
+ new ExprApp(new ExprVar(data->symbols.create("__getEnv")),
+ new ExprString(data->symbols.create("HOME"))),
+ new ExprString(data->symbols.create(path))});
+ }
| SPATH {
string path($1 + 1, strlen($1) - 2);
$$ = new ExprApp(CUR_POS,