aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/parser.y2
-rw-r--r--tests/lang/eval-okay-strings-as-attrs-names.exp1
-rw-r--r--tests/lang/eval-okay-strings-as-attrs-names.nix20
3 files changed, 23 insertions, 0 deletions
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index ec194a516..e5c586266 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -411,6 +411,8 @@ attrpath
attr
: ID { $$ = $1; }
| OR_KW { $$ = "or"; }
+ | '"' STR '"'
+ { $$ = strdup(((string) ((ExprString *) $2)->s).c_str()); delete $2; }
;
expr_list
diff --git a/tests/lang/eval-okay-strings-as-attrs-names.exp b/tests/lang/eval-okay-strings-as-attrs-names.exp
new file mode 100644
index 000000000..27ba77dda
--- /dev/null
+++ b/tests/lang/eval-okay-strings-as-attrs-names.exp
@@ -0,0 +1 @@
+true
diff --git a/tests/lang/eval-okay-strings-as-attrs-names.nix b/tests/lang/eval-okay-strings-as-attrs-names.nix
new file mode 100644
index 000000000..5e40928db
--- /dev/null
+++ b/tests/lang/eval-okay-strings-as-attrs-names.nix
@@ -0,0 +1,20 @@
+let
+
+ attr = {
+ "key 1" = "test";
+ "key 2" = "caseok";
+ };
+
+ t1 = builtins.getAttr "key 1" attr;
+ t2 = attr."key 2";
+ t3 = attr ? "key 1";
+ t4 = builtins.attrNames { inherit (attr) "key 1"; };
+
+ # This is permitted, but there is currently no way to reference this
+ # variable.
+ "foo bar" = 1;
+
+in t1 == "test"
+ && t2 == "caseok"
+ && t3 == true
+ && t4 == ["key 1"]