diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2011-07-06T10·58+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2011-07-06T10·58+0000 |
commit | 56370378023fc84eb0153b991f4138f6acd011e3 (patch) | |
tree | 19034285effef61c373eef092e91f717c4cea020 /src/libexpr/nixexpr.hh | |
parent | 34f4b91820796381d04c6e00ea5e805cf53d25da (diff) |
* In the ‘?’ operator, allow attribute paths. For instance, you can
write ‘attrs ? a.b’ to test whether ‘attrs’ has an attribute ‘a’ containing an attribute ‘b’. This is more convenient than ‘attrs ? a && attrs.a ? b’. Slight change in the semantics: it's no longer an error if the left-hand side of ‘?’ is not an attribute set. In that case it just returns false. So, ‘null ? foo’ no longer throws an error.
Diffstat (limited to 'src/libexpr/nixexpr.hh')
-rw-r--r-- | src/libexpr/nixexpr.hh | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libexpr/nixexpr.hh b/src/libexpr/nixexpr.hh index 8f976f1de8f9..205f579daf3d 100644 --- a/src/libexpr/nixexpr.hh +++ b/src/libexpr/nixexpr.hh @@ -40,6 +40,12 @@ struct EvalState; struct StaticEnv; +/* An attribute path is a sequence of attribute names. */ +typedef vector<Symbol> AttrPath; + +string showAttrPath(const AttrPath & attrPath); + + /* Abstract syntax of Nix expressions. */ struct Expr @@ -124,8 +130,8 @@ struct ExprSelect : Expr struct ExprOpHasAttr : Expr { Expr * e; - Symbol name; - ExprOpHasAttr(Expr * e, const Symbol & name) : e(e), name(name) { }; + AttrPath attrPath; + ExprOpHasAttr(Expr * e, const AttrPath & attrPath) : e(e), attrPath(attrPath) { }; COMMON_METHODS }; |