feat(tvix): Add a pos field to more expr classes
To aid in both debugging and (eventually) printing stacktraces, add a Pos member to a few more Expr variants. Change-Id: Ic1d2a056fc7e6c07bc3e79fa38845cb4a5da5ca5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2133 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
9f4d37e5df
commit
9a24294b8a
2 changed files with 14 additions and 6 deletions
10
third_party/nix/src/libexpr/nixexpr.hh
vendored
10
third_party/nix/src/libexpr/nixexpr.hh
vendored
|
@ -179,9 +179,12 @@ struct ExprSelect : Expr {
|
|||
};
|
||||
|
||||
struct ExprOpHasAttr : Expr {
|
||||
Pos pos;
|
||||
Expr* e;
|
||||
AttrPath attrPath;
|
||||
ExprOpHasAttr(Expr* e, const AttrPath& attrPath) : e(e), attrPath(attrPath){};
|
||||
ExprOpHasAttr(const Pos& pos, Expr* e, const AttrPath& attrPath)
|
||||
: pos(pos), e(e), attrPath(attrPath){};
|
||||
COMMON_METHODS
|
||||
};
|
||||
|
||||
|
@ -279,9 +282,12 @@ struct ExprWith : Expr {
|
|||
};
|
||||
|
||||
struct ExprIf : Expr {
|
||||
Pos pos;
|
||||
Expr *cond, *then, *else_;
|
||||
ExprIf(Expr* cond, Expr* then, Expr* else_)
|
||||
: cond(cond), then(then), else_(else_){};
|
||||
ExprIf(const Pos& pos, Expr* cond, Expr* then, Expr* else_)
|
||||
: pos(pos), cond(cond), then(then), else_(else_){};
|
||||
COMMON_METHODS
|
||||
};
|
||||
|
||||
|
@ -294,8 +300,10 @@ struct ExprAssert : Expr {
|
|||
};
|
||||
|
||||
struct ExprOpNot : Expr {
|
||||
Pos pos;
|
||||
Expr* e;
|
||||
ExprOpNot(Expr* e) : e(e){};
|
||||
explicit ExprOpNot(Expr* e) : e(e){};
|
||||
ExprOpNot(const Pos& pos, Expr* e) : pos(pos), e(e){};
|
||||
COMMON_METHODS
|
||||
};
|
||||
|
||||
|
|
10
third_party/nix/src/libexpr/parser.y
vendored
10
third_party/nix/src/libexpr/parser.y
vendored
|
@ -121,15 +121,15 @@ expr_function
|
|||
;
|
||||
|
||||
expr_if
|
||||
: IF expr THEN expr ELSE expr { $$ = new ExprIf($2, $4, $6); }
|
||||
: IF expr THEN expr ELSE expr { $$ = new ExprIf(CUR_POS, $2, $4, $6); }
|
||||
| expr_op
|
||||
;
|
||||
|
||||
expr_op
|
||||
: '!' expr_op %prec NOT { $$ = new ExprOpNot($2); }
|
||||
: '!' expr_op %prec NOT { $$ = new ExprOpNot(CUR_POS, $2); }
|
||||
| '-' expr_op %prec NEGATE { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.Create("__sub")), new ExprInt(0)), $2); }
|
||||
| expr_op EQ expr_op { $$ = new ExprOpEq($1, $3); }
|
||||
| expr_op NEQ expr_op { $$ = new ExprOpNEq($1, $3); }
|
||||
| expr_op EQ expr_op { $$ = new ExprOpEq(CUR_POS, $1, $3); }
|
||||
| expr_op NEQ expr_op { $$ = new ExprOpNEq(CUR_POS, $1, $3); }
|
||||
| expr_op '<' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.Create("__lessThan")), $1), $3); }
|
||||
| expr_op LEQ expr_op { $$ = new ExprOpNot(new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.Create("__lessThan")), $3), $1)); }
|
||||
| expr_op '>' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.Create("__lessThan")), $3), $1); }
|
||||
|
@ -138,7 +138,7 @@ expr_op
|
|||
| expr_op OR expr_op { $$ = new ExprOpOr(CUR_POS, $1, $3); }
|
||||
| expr_op IMPL expr_op { $$ = new ExprOpImpl(CUR_POS, $1, $3); }
|
||||
| expr_op UPDATE expr_op { $$ = new ExprOpUpdate(CUR_POS, $1, $3); }
|
||||
| expr_op '?' attrpath { $$ = new ExprOpHasAttr($1, *$3); }
|
||||
| expr_op '?' attrpath { $$ = new ExprOpHasAttr(CUR_POS, $1, *$3); }
|
||||
| expr_op '+' expr_op
|
||||
{ $$ = new ExprConcatStrings(CUR_POS, false, new nix::VectorExprs({$1, $3})); }
|
||||
| expr_op '-' expr_op { $$ = new ExprApp(CUR_POS, new ExprApp(new ExprVar(data->symbols.Create("__sub")), $1), $3); }
|
||||
|
|
Loading…
Reference in a new issue