aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/nixexpr.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr/nixexpr.hh')
-rw-r--r--src/libexpr/nixexpr.hh20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/libexpr/nixexpr.hh b/src/libexpr/nixexpr.hh
index 1aa3df368..8f976f1de 100644
--- a/src/libexpr/nixexpr.hh
+++ b/src/libexpr/nixexpr.hh
@@ -101,6 +101,7 @@ struct VarRef
unsigned int level;
unsigned int displ;
+ VarRef() { };
VarRef(const Symbol & name) : name(name) { };
void bind(const StaticEnv & env);
};
@@ -131,13 +132,18 @@ struct ExprOpHasAttr : Expr
struct ExprAttrs : Expr
{
bool recursive;
- typedef std::pair<Expr *, Pos> Attr;
- typedef std::pair<VarRef, Pos> Inherited;
- typedef std::map<Symbol, Attr> Attrs;
- Attrs attrs;
- list<Inherited> inherited;
- std::map<Symbol, Pos> attrNames; // used during parsing
- std::map<Symbol, unsigned int> displs;
+ struct AttrDef {
+ bool inherited;
+ Expr * e; // if not inherited
+ VarRef var; // if inherited
+ Pos pos;
+ unsigned int displ; // displacement
+ AttrDef(Expr * e, const Pos & pos) : inherited(false), e(e), pos(pos) { };
+ AttrDef(const Symbol & name, const Pos & pos) : inherited(true), var(name), pos(pos) { };
+ AttrDef() { };
+ };
+ typedef std::map<Symbol, AttrDef> AttrDefs;
+ AttrDefs attrs;
ExprAttrs() : recursive(false) { };
COMMON_METHODS
};