Properly exit when an unknown tool is defined. And pass along the correct error instead of overwriting it. Change-Id: I2fc533c029de611e800d80e44d39b29f603a68ba Reviewed-on: https://gn-review.googlesource.com/c/gn/+/4803 Commit-Queue: Julie Hockett <juliehockett@google.com> Reviewed-by: Brett Wilson <brettw@google.com>
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc index 7fc57c7..3d2a100 100644 --- a/tools/gn/function_toolchain.cc +++ b/tools/gn/function_toolchain.cc
@@ -753,10 +753,9 @@ return Value(); std::unique_ptr<Tool> tool = - Tool::CreateTool(tool_name, &block_scope, toolchain, err); + Tool::CreateTool(function, tool_name, &block_scope, toolchain, err); if (!tool) { - *err = Err(function, "Unknown tool type"); return Value(); }
diff --git a/tools/gn/tool.cc b/tools/gn/tool.cc index f60e3d4..7a06b03 100644 --- a/tools/gn/tool.cc +++ b/tools/gn/tool.cc
@@ -53,14 +53,14 @@ return false; } -bool Tool::ValidateSubstitutionList(const std::vector<const Substitution*>& list, - const Value* origin, - Err* err) const { +bool Tool::ValidateSubstitutionList( + const std::vector<const Substitution*>& list, + const Value* origin, + Err* err) const { for (const auto& cur_type : list) { if (!ValidateSubstitution(cur_type)) { *err = Err(*origin, "Pattern not valid here.", - "You used the pattern " + - std::string(cur_type->name) + + "You used the pattern " + std::string(cur_type->name) + " which is not valid\nfor this variable."); return false; } @@ -196,11 +196,16 @@ return true; } -std::unique_ptr<Tool> Tool::CreateTool(const std::string& name, +std::unique_ptr<Tool> Tool::CreateTool(const ParseNode* function, + const std::string& name, Scope* scope, Toolchain* toolchain, Err* err) { std::unique_ptr<Tool> tool = CreateTool(name); + if (!tool) { + *err = Err(function, "Unknown tool type."); + return nullptr; + } if (CTool* c_tool = tool->AsC()) { if (c_tool->InitTool(scope, toolchain, err)) return tool; @@ -212,6 +217,7 @@ return nullptr; } NOTREACHED(); + *err = Err(function, "Unknown tool type."); return nullptr; }
diff --git a/tools/gn/tool.h b/tools/gn/tool.h index d800886..ec2eb94 100644 --- a/tools/gn/tool.h +++ b/tools/gn/tool.h
@@ -165,7 +165,8 @@ // Create a tool based on given features. static std::unique_ptr<Tool> CreateTool(const std::string& name); - static std::unique_ptr<Tool> CreateTool(const std::string& name, + static std::unique_ptr<Tool> CreateTool(const ParseNode* function, + const std::string& name, Scope* scope, Toolchain* toolchain, Err* err);