mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use all referenced errors.
This commit is contained in:
+10
-2
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <libsolidity/ast/AST.h>
|
||||
|
||||
#include <libsolidity/ast/CallGraph.h>
|
||||
#include <libsolidity/ast/ASTVisitor.h>
|
||||
#include <libsolidity/ast/AST_accept.h>
|
||||
#include <libsolidity/ast/TypeProvider.h>
|
||||
@@ -174,12 +175,19 @@ vector<EventDefinition const*> const& ContractDefinition::interfaceEvents() cons
|
||||
});
|
||||
}
|
||||
|
||||
vector<ErrorDefinition const*> ContractDefinition::interfaceErrors() const
|
||||
vector<ErrorDefinition const*> ContractDefinition::interfaceErrors(bool _requireCallGraph) const
|
||||
{
|
||||
set<ErrorDefinition const*, CompareByID> result;
|
||||
// TODO add all referenced errors
|
||||
for (ContractDefinition const* contract: annotation().linearizedBaseContracts)
|
||||
result += filteredNodes<ErrorDefinition>(contract->m_subNodes);
|
||||
solAssert(annotation().creationCallGraph.set() == annotation().deployedCallGraph.set(), "");
|
||||
if (_requireCallGraph)
|
||||
solAssert(annotation().creationCallGraph.set(), "");
|
||||
if (annotation().creationCallGraph.set())
|
||||
{
|
||||
result += (*annotation().creationCallGraph)->usedErrors;
|
||||
result += (*annotation().deployedCallGraph)->usedErrors;
|
||||
}
|
||||
return convertContainer<vector<ErrorDefinition const*>>(move(result));
|
||||
}
|
||||
|
||||
|
||||
@@ -515,7 +515,8 @@ public:
|
||||
std::vector<EventDefinition const*> const& interfaceEvents() const;
|
||||
/// @returns all errors defined in this contract or any base contract
|
||||
/// and all errors referenced during execution.
|
||||
std::vector<ErrorDefinition const*> interfaceErrors() const;
|
||||
/// @param _requireCallGraph if false, do not fail if the call graph has not been computed yet.
|
||||
std::vector<ErrorDefinition const*> interfaceErrors(bool _requireCallGraph = true) const;
|
||||
bool isInterface() const { return m_contractKind == ContractKind::Interface; }
|
||||
bool isLibrary() const { return m_contractKind == ContractKind::Library; }
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ struct CallGraph
|
||||
|
||||
/// Events that may get emitted by functions present in the graph.
|
||||
std::set<EventDefinition const*, ASTNode::CompareByID> emittedEvents;
|
||||
|
||||
/// Errors that are used by functions present in the graph.
|
||||
std::set<ErrorDefinition const*, ASTNode::CompareByID> usedErrors;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user