diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2022-09-23 16:41:47 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2022-10-05 14:35:36 +0200 |
commit | 72b171430b5c9e90aec5173e33d36f247d308128 (patch) | |
tree | 400d162cabf30763ccb5d3ab493ecf302e47bc48 /src | |
parent | 161bf4ab797a481142315d1803170cf4be590036 (diff) | |
download | justbuild-72b171430b5c9e90aec5173e33d36f247d308128.tar.gz |
AnalysedTarget: Make shared pointer's content immutable
... while technically not required, it makes it harder to
run into nasty errors.
Diffstat (limited to 'src')
6 files changed, 38 insertions, 37 deletions
diff --git a/src/buildtool/build_engine/analysed_target/analysed_target.hpp b/src/buildtool/build_engine/analysed_target/analysed_target.hpp index c99f6dfc..77ebfb1e 100644 --- a/src/buildtool/build_engine/analysed_target/analysed_target.hpp +++ b/src/buildtool/build_engine/analysed_target/analysed_target.hpp @@ -114,6 +114,6 @@ class AnalysedTarget { TargetGraphInformation graph_information_; }; -using AnalysedTargetPtr = std::shared_ptr<AnalysedTarget>; +using AnalysedTargetPtr = std::shared_ptr<AnalysedTarget const>; #endif // INCLUDED_SRC_BUILDTOOL_BUILDENGINE_ANALYSED_TARGET_ANALYSED_TARGET_HPP diff --git a/src/buildtool/build_engine/base_maps/source_map.cpp b/src/buildtool/build_engine/base_maps/source_map.cpp index 9624ce1d..c2653e93 100644 --- a/src/buildtool/build_engine/base_maps/source_map.cpp +++ b/src/buildtool/build_engine/base_maps/source_map.cpp @@ -15,7 +15,7 @@ auto as_target(const BuildMaps::Base::EntityName& key, ExpressionPtr artifact) -> AnalysedTargetPtr { auto stage = ExpressionPtr{ Expression::map_t{key.GetNamedTarget().name, std::move(artifact)}}; - return std::make_shared<AnalysedTarget>( + return std::make_shared<AnalysedTarget const>( TargetResult{stage, Expression::kEmptyMap, stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index 1f6e0b09..ca4fd630 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -166,7 +166,7 @@ void FileGenRuleWithDeps( auto vars_set = std::unordered_set<std::string>{}; vars_set.insert(param_vars->begin(), param_vars->end()); - auto analysis_result = std::make_shared<AnalysedTarget>( + auto analysis_result = std::make_shared<AnalysedTarget const>( TargetResult{stage, ExpressionPtr{Expression::map_t{}}, stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{data_val->String()}, @@ -379,14 +379,14 @@ void InstallRuleWithDeps( } auto const& empty_map = Expression::kEmptyMap; - auto result = - std::make_shared<AnalysedTarget>(TargetResult{stage, empty_map, stage}, - std::vector<ActionDescription::Ptr>{}, - std::vector<std::string>{}, - std::vector<Tree::Ptr>{}, - std::move(effective_vars), - std::move(tainted), - std::move(deps_info)); + auto result = std::make_shared<AnalysedTarget const>( + TargetResult{stage, empty_map, stage}, + std::vector<ActionDescription::Ptr>{}, + std::vector<std::string>{}, + std::vector<Tree::Ptr>{}, + std::move(effective_vars), + std::move(tainted), + std::move(deps_info)); result = result_map->Add(key.target, effective_conf, std::move(result)); (*setter)(std::move(result)); @@ -833,7 +833,7 @@ void GenericRuleWithDeps( } auto const& empty_map = Expression::kEmptyMap; - auto result = std::make_shared<AnalysedTarget>( + auto result = std::make_shared<AnalysedTarget const>( TargetResult{ ExpressionPtr{Expression::map_t{artifacts}}, empty_map, empty_map}, std::vector<ActionDescription::Ptr>{action}, diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp index 9a43a591..e535a87a 100644 --- a/src/buildtool/build_engine/target_map/export.cpp +++ b/src/buildtool/build_engine/target_map/export.cpp @@ -47,7 +47,7 @@ void FinalizeExport( std::unordered_set<std::string> vars_set{}; vars_set.insert(vars.begin(), vars.end()); - auto analysis_result = std::make_shared<AnalysedTarget>( + auto analysis_result = std::make_shared<AnalysedTarget const>( TargetResult{(*value)->Artifacts(), provides, (*value)->RunFiles()}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, @@ -126,7 +126,7 @@ void ExportRule( {}, {}}; - auto analysis_result = std::make_shared<AnalysedTarget>( + auto analysis_result = std::make_shared<AnalysedTarget const>( *result, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index 799b73bb..6741de2e 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -778,13 +778,13 @@ void withDependencies( return; } auto analysis_result = - std::make_shared<AnalysedTarget>(std::move(*result).Result(), - std::move(actions), - std::move(blobs), - std::move(trees), - std::move(effective_vars), - std::move(tainted), - deps_info); + std::make_shared<AnalysedTarget const>(std::move(*result).Result(), + std::move(actions), + std::move(blobs), + std::move(trees), + std::move(effective_vars), + std::move(tainted), + deps_info); analysis_result = result_map->Add(key.target, effective_conf, std::move(analysis_result)); (*setter)(std::move(analysis_result)); @@ -1279,7 +1279,7 @@ void withTargetNode( if (target_node.IsValue()) { // fixed value node, create analysed target from result auto const& val = target_node.GetValue(); - (*setter)(std::make_shared<AnalysedTarget>( + (*setter)(std::make_shared<AnalysedTarget const>( AnalysedTarget{val->Result(), {}, {}, @@ -1375,7 +1375,7 @@ void TreeTarget( auto tree = ExpressionPtr{ Expression::map_t{target.name, ExpressionPtr{*known_tree}}}; - auto analysis_result = std::make_shared<AnalysedTarget>( + auto analysis_result = std::make_shared<AnalysedTarget const>( TargetResult{tree, {}, tree}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, @@ -1444,14 +1444,15 @@ void TreeTarget( auto tree_id = tree->Id(); auto tree_map = ExpressionPtr{Expression::map_t{ name, ExpressionPtr{ArtifactDescription{tree_id}}}}; - auto analysis_result = std::make_shared<AnalysedTarget>( - TargetResult{tree_map, {}, tree_map}, - std::vector<ActionDescription::Ptr>{}, - std::vector<std::string>{}, - std::vector<Tree::Ptr>{tree}, - std::unordered_set<std::string>{}, - std::set<std::string>{}, - TargetGraphInformation::kSource); + auto analysis_result = + std::make_shared<AnalysedTarget const>( + TargetResult{tree_map, {}, tree_map}, + std::vector<ActionDescription::Ptr>{}, + std::vector<std::string>{}, + std::vector<Tree::Ptr>{tree}, + std::unordered_set<std::string>{}, + std::set<std::string>{}, + TargetGraphInformation::kSource); analysis_result = result_map->Add( key.target, {}, std::move(analysis_result)); (*setter)(std::move(analysis_result)); @@ -1475,7 +1476,7 @@ void GlobResult(const std::vector<AnalysedTargetPtr const*>& values, } } auto stage = ExpressionPtr{Expression::map_t{result}}; - auto target = std::make_shared<AnalysedTarget>( + auto target = std::make_shared<AnalysedTarget const>( TargetResult{stage, Expression::kEmptyMap, stage}, std::vector<ActionDescription::Ptr>{}, std::vector<std::string>{}, diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index 6f329391..cfbe939d 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -75,9 +75,9 @@ void DetectAndReportPending(std::string const& name, return std::nullopt; } -[[nodiscard]] auto SwitchToActionInput( - const std::shared_ptr<AnalysedTarget>& target, - const ActionDescription::Ptr& action) -> std::shared_ptr<AnalysedTarget> { +[[nodiscard]] auto SwitchToActionInput(const AnalysedTargetPtr& target, + const ActionDescription::Ptr& action) + -> AnalysedTargetPtr { auto inputs = Expression::map_t::underlying_map_t{}; for (auto const& [k, v] : action->Inputs()) { inputs[k] = ExpressionPtr{Expression{v}}; @@ -93,7 +93,7 @@ void DetectAndReportPending(std::string const& name, } auto provides_exp = Expression::FromJson(provides); - return std::make_shared<AnalysedTarget>( + return std::make_shared<AnalysedTarget const>( TargetResult{inputs_exp, provides_exp, Expression::kEmptyMap}, std::vector<ActionDescription::Ptr>{action}, target->Blobs(), @@ -124,7 +124,7 @@ void DetectAndReportPending(std::string const& name, result_map, jobs); Logger::Log(LogLevel::Info, "Requested target is {}", id.ToString()); - std::shared_ptr<AnalysedTarget> target{}; + AnalysedTargetPtr target{}; bool failed{false}; { |