diff options
6 files changed, 26 insertions, 39 deletions
diff --git a/src/buildtool/build_engine/expression/configuration.hpp b/src/buildtool/build_engine/expression/configuration.hpp index 3e0328d8..725d2860 100644 --- a/src/buildtool/build_engine/expression/configuration.hpp +++ b/src/buildtool/build_engine/expression/configuration.hpp @@ -97,7 +97,7 @@ class Configuration { auto const& map = expr_->Map(); auto v = map.Find(k); if (v) { - subset.emplace(k, v->get()); + subset.emplace(k, **v); } else { subset.emplace(k, Expression::kNone); @@ -114,7 +114,7 @@ class Configuration { auto const key = k->String(); auto v = map.Find(key); if (v) { - subset.emplace(key, v->get()); + subset.emplace(key, **v); } else { subset.emplace(key, ExpressionPtr{Expression::none_t{}}); diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp index 1d207b3b..d2cee809 100644 --- a/src/buildtool/build_engine/expression/evaluator.cpp +++ b/src/buildtool/build_engine/expression/evaluator.cpp @@ -661,11 +661,10 @@ auto ToSubdirExpr(SubExprEvaluator&& eval, } std::string msg; try { - auto msg_val = eval(msg_expr->get(), env); + auto msg_val = eval(**msg_expr, env); msg = msg_val->ToString(); } catch (std::exception const&) { - msg = - "[non evaluating term] " + msg_expr->get()->ToString(); + msg = "[non evaluating term] " + (**msg_expr)->ToString(); } std::stringstream ss{}; ss << msg << std::endl; @@ -693,11 +692,10 @@ auto ToSubdirExpr(SubExprEvaluator&& eval, } std::string msg; try { - auto msg_val = eval(msg_expr->get(), env); + auto msg_val = eval(**msg_expr, env); msg = msg_val->ToString(); } catch (std::exception const&) { - msg = - "[non evaluating term] " + msg_expr->get()->ToString(); + msg = "[non evaluating term] " + (**msg_expr)->ToString(); } std::stringstream ss{}; ss << msg << std::endl; @@ -899,10 +897,10 @@ auto DisjointUnionExpr(SubExprEvaluator&& eval, } std::string msg; try { - auto msg_val = eval(msg_expr->get(), env); + auto msg_val = eval(**msg_expr, env); msg = msg_val->ToString(); } catch (std::exception const&) { - msg = "[non evaluating term] " + msg_expr->get()->ToString(); + msg = "[non evaluating term] " + (**msg_expr)->ToString(); } std::stringstream ss{}; ss << msg << std::endl; @@ -1098,7 +1096,7 @@ auto Evaluator::Evaluate(ExpressionPtr const& expr, auto const& type = expr["type"]->String(); auto func = functions->Find(type); if (func) { - return func->get()( + return (**func)( [&functions](auto const& subexpr, auto const& subenv) { return Evaluator::Evaluate(subexpr, subenv, functions); }, diff --git a/src/buildtool/build_engine/expression/expression.cpp b/src/buildtool/build_engine/expression/expression.cpp index 1cb27a69..0b470a9d 100644 --- a/src/buildtool/build_engine/expression/expression.cpp +++ b/src/buildtool/build_engine/expression/expression.cpp @@ -31,7 +31,7 @@ auto Expression::operator[]( std::string const& key) const& -> ExpressionPtr const& { auto value = Map().Find(key); if (value) { - return value->get(); + return **value; } throw ExpressionTypeError{ fmt::format("Map does not contain key '{}'.", key)}; diff --git a/src/buildtool/build_engine/expression/expression.hpp b/src/buildtool/build_engine/expression/expression.hpp index 9915c089..70c7e4df 100644 --- a/src/buildtool/build_engine/expression/expression.hpp +++ b/src/buildtool/build_engine/expression/expression.hpp @@ -145,7 +145,7 @@ class Expression { const& -> std::optional<std::reference_wrapper<ExpressionPtr const>> { auto value = Map().Find(key); if (value) { - return value; + return std::reference_wrapper{**value}; } return std::nullopt; } diff --git a/src/buildtool/build_engine/expression/linked_map.hpp b/src/buildtool/build_engine/expression/linked_map.hpp index e19c5e68..6f394c7e 100644 --- a/src/buildtool/build_engine/expression/linked_map.hpp +++ b/src/buildtool/build_engine/expression/linked_map.hpp @@ -139,7 +139,7 @@ class LinkedMap { [[nodiscard]] auto at(K const& key) const& -> V const& { auto value = Find(key); if (value) { - return value->get(); + return **value; } throw std::out_of_range{fmt::format("Missing key {}", key)}; } @@ -163,7 +163,7 @@ class LinkedMap { } [[nodiscard]] auto Find(K const& key) const& noexcept - -> std::optional<std::reference_wrapper<V const>> { + -> std::optional<V const*> { if (content_.IsNotNull()) { auto val = content_.Map().Find(key); if (val) { @@ -173,7 +173,7 @@ class LinkedMap { else { auto it = map_.find(key); if (it != map_.end()) { - return it->second; + return &it->second; } } if (next_.IsNotNull()) { @@ -189,7 +189,7 @@ class LinkedMap { if (content_.IsNotNull()) { auto val = content_.Map().Find(key); if (val) { - return val->get(); + return **val; } } else { @@ -201,7 +201,7 @@ class LinkedMap { if (next_.IsNotNull()) { auto val = next_.Map().Find(key); if (val) { - return val->get(); + return **val; } } return std::nullopt; diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index a19ec2df..40c0891b 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -155,10 +155,8 @@ struct TargetData { /*fatal=*/true); return nullptr; } - auto const& config_expr = - string_fields.Find(field_name) - .value_or(std::reference_wrapper{Expression::kEmptyList}) - .get(); + auto const& config_expr = *(string_fields.Find(field_name) + .value_or(&Expression::kEmptyList)); config_exprs.emplace(field_name, config_expr); } @@ -173,10 +171,8 @@ struct TargetData { /*fatal=*/true); return nullptr; } - auto const& string_expr = - string_fields.Find(field_name) - .value_or(std::reference_wrapper{Expression::kEmptyList}) - .get(); + auto const& string_expr = *(string_fields.Find(field_name) + .value_or(&Expression::kEmptyList)); string_exprs.emplace(field_name, string_expr); } @@ -191,10 +187,8 @@ struct TargetData { /*fatal=*/true); return nullptr; } - auto const& target_expr = - target_fields.Find(field_name) - .value_or(std::reference_wrapper{Expression::kEmptyList}) - .get(); + auto const& target_expr = *(target_fields.Find(field_name) + .value_or(&Expression::kEmptyList)); auto const& nodes = target_expr->List(); Expression::list_t targets{}; targets.reserve(nodes.size()); @@ -1132,7 +1126,7 @@ void withRuleDefinition( true); return; } - auto const& exprs = provider_value->get(); + auto const& exprs = **provider_value; if (not exprs->IsList()) { (*logger)(fmt::format("Provider {} in {} must be list " "of target nodes but found: {}", @@ -1363,14 +1357,9 @@ void withTargetNode( } rule_map->ConsumeAfterKeysReady( ts, - {rule_name->get()->Name()}, - [abs, - subcaller, - setter, - logger, - key, - result_map, - rn = rule_name->get()](auto values) { + {(**rule_name)->Name()}, + [abs, subcaller, setter, logger, key, result_map, rn = **rule_name]( + auto values) { auto data = TargetData::FromTargetNode( *values[0], abs, |