diff --git a/third_party/nix/src/libexpr/nixexpr.hh b/third_party/nix/src/libexpr/nixexpr.hh index 22b5f871f..16b58dec2 100644 --- a/third_party/nix/src/libexpr/nixexpr.hh +++ b/third_party/nix/src/libexpr/nixexpr.hh @@ -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 }; diff --git a/third_party/nix/src/libexpr/parser.y b/third_party/nix/src/libexpr/parser.y index ba6490e60..a8af06802 100644 --- a/third_party/nix/src/libexpr/parser.y +++ b/third_party/nix/src/libexpr/parser.y @@ -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); }