Allow the leading component of a path to be a ~
This commit is contained in:
parent
1816ac0db1
commit
e0953d53de
|
@ -155,7 +155,14 @@ stdenv.mkDerivation {
|
||||||
expression that contained it. For instance, if a Nix expression in
|
expression that contained it. For instance, if a Nix expression in
|
||||||
<filename>/foo/bar/bla.nix</filename> refers to
|
<filename>/foo/bar/bla.nix</filename> refers to
|
||||||
<filename>../xyzzy/fnord.nix</filename>, the absolute path is
|
<filename>../xyzzy/fnord.nix</filename>, the absolute path is
|
||||||
<filename>/foo/xyzzy/fnord.nix</filename>.</para></listitem>
|
<filename>/foo/xyzzy/fnord.nix</filename>.</para>
|
||||||
|
|
||||||
|
<para>If the first component of a path is a <literal>~</literal>,
|
||||||
|
it is interpreted as if the rest of the path were relative to the
|
||||||
|
user's home directory. e.g. <filename>~/foo</filename> would be
|
||||||
|
equivalent to <filename>/home/edolstra/foo</filename> for a user
|
||||||
|
whose home directory is <filename>/home/edolstra</filename>.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
<listitem><para><emphasis>Booleans</emphasis> with values
|
<listitem><para><emphasis>Booleans</emphasis> with values
|
||||||
<literal>true</literal> and
|
<literal>true</literal> and
|
||||||
|
|
|
@ -80,6 +80,7 @@ static Expr * unescapeStr(SymbolTable & symbols, const char * s)
|
||||||
ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]*
|
ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]*
|
||||||
INT [0-9]+
|
INT [0-9]+
|
||||||
PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+
|
PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+
|
||||||
|
HPATH \~(\/[a-zA-Z0-9\.\_\-\+]+)+
|
||||||
SPATH \<[a-zA-Z0-9\.\_\-\+]+(\/[a-zA-Z0-9\.\_\-\+]+)*\>
|
SPATH \<[a-zA-Z0-9\.\_\-\+]+(\/[a-zA-Z0-9\.\_\-\+]+)*\>
|
||||||
URI [a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']+
|
URI [a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']+
|
||||||
|
|
||||||
|
@ -159,6 +160,7 @@ or { return OR_KW; }
|
||||||
<IND_STRING>. return yytext[0]; /* just in case: shouldn't be reached */
|
<IND_STRING>. return yytext[0]; /* just in case: shouldn't be reached */
|
||||||
|
|
||||||
{PATH} { yylval->path = strdup(yytext); return PATH; }
|
{PATH} { yylval->path = strdup(yytext); return PATH; }
|
||||||
|
{HPATH} { yylval->path = strdup(yytext); return HPATH; }
|
||||||
{SPATH} { yylval->path = strdup(yytext); return SPATH; }
|
{SPATH} { yylval->path = strdup(yytext); return SPATH; }
|
||||||
{URI} { yylval->uri = strdup(yytext); return URI; }
|
{URI} { yylval->uri = strdup(yytext); return URI; }
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, const char * err
|
||||||
%token <id> ID ATTRPATH
|
%token <id> ID ATTRPATH
|
||||||
%token <e> STR IND_STR
|
%token <e> STR IND_STR
|
||||||
%token <n> INT
|
%token <n> INT
|
||||||
%token <path> PATH SPATH
|
%token <path> PATH HPATH SPATH
|
||||||
%token <uri> URI
|
%token <uri> URI
|
||||||
%token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL OR_KW
|
%token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL OR_KW
|
||||||
%token DOLLAR_CURLY /* == ${ */
|
%token DOLLAR_CURLY /* == ${ */
|
||||||
|
@ -376,6 +376,14 @@ expr_simple
|
||||||
$$ = stripIndentation(CUR_POS, data->symbols, *$2);
|
$$ = stripIndentation(CUR_POS, data->symbols, *$2);
|
||||||
}
|
}
|
||||||
| PATH { $$ = new ExprPath(absPath($1, data->basePath)); }
|
| 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 {
|
| SPATH {
|
||||||
string path($1 + 1, strlen($1) - 2);
|
string path($1 + 1, strlen($1) - 2);
|
||||||
$$ = new ExprApp(CUR_POS,
|
$$ = new ExprApp(CUR_POS,
|
||||||
|
|
Loading…
Reference in a new issue