summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/expression/evaluator.cpp
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2022-09-19 13:00:11 +0200
committerOliver Reiche <oliver.reiche@huawei.com>2022-10-05 15:13:54 +0200
commitb5b2a07bf5b348e61ddfcf7579607adaad31456d (patch)
tree3b5760bffaf822b874972f519d9eeac05fc58b48 /src/buildtool/build_engine/expression/evaluator.cpp
parent07e75490b519b9d9829fc5ee86ae4b715a32773f (diff)
downloadjustbuild-b5b2a07bf5b348e61ddfcf7579607adaad31456d.tar.gz
Expr: Add 'env' expression
Diffstat (limited to 'src/buildtool/build_engine/expression/evaluator.cpp')
-rw-r--r--src/buildtool/build_engine/expression/evaluator.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp
index af5d46ed..f7882342 100644
--- a/src/buildtool/build_engine/expression/evaluator.cpp
+++ b/src/buildtool/build_engine/expression/evaluator.cpp
@@ -776,6 +776,28 @@ auto LetExpr(SubExprEvaluator&& eval,
}
}
+auto EnvExpr(SubExprEvaluator&& /*eval*/,
+ ExpressionPtr const& expr,
+ Configuration const& env) -> ExpressionPtr {
+ if (auto const& vars = expr->At("vars")) {
+ if (not vars->get()->IsList()) {
+ throw Evaluator::EvaluationError{fmt::format(
+ "vars in env has to be a list of strings, but found {}",
+ vars->get()->ToString())};
+ }
+ for (const auto& var : vars->get()->List()) {
+ if (not var->IsString()) {
+ throw Evaluator::EvaluationError{
+ fmt::format("vars in env has to be a list of strings, "
+ "but found entry {}",
+ var->ToString())};
+ }
+ }
+ return env.Prune(vars->get()).Expr();
+ }
+ return Expression::kEmptyMap;
+}
+
auto ConcatTargetNameExpr(SubExprEvaluator&& eval,
ExpressionPtr const& expr,
Configuration const& env) -> ExpressionPtr {
@@ -906,6 +928,7 @@ auto const kBuiltInFunctions =
{"foreach_map", ForeachMapExpr},
{"foldl", FoldLeftExpr},
{"let*", LetExpr},
+ {"env", EnvExpr},
{"concat_target_name", ConcatTargetNameExpr}});
} // namespace