From 3b83365b42d7a8b4f9ed603beb30f72ecc4ea467 Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Mon, 16 Mar 2020 11:47:39 +0100 Subject: [PATCH] [libsolidity] TryStatement: Adding AST accessors for success/structured/fail clauses. --- libsolidity/ast/AST.cpp | 22 ++++++++++++++++++++++ libsolidity/ast/AST.h | 4 ++++ 2 files changed, 26 insertions(+) diff --git a/libsolidity/ast/AST.cpp b/libsolidity/ast/AST.cpp index d9425937f..badb59f35 100644 --- a/libsolidity/ast/AST.cpp +++ b/libsolidity/ast/AST.cpp @@ -756,3 +756,25 @@ string Literal::getChecksummedAddress() const address.insert(address.begin(), 40 - address.size(), '0'); return util::getChecksummedAddress(address); } + +TryCatchClause const* TryStatement::successClause() const +{ + solAssert(m_clauses.size() > 0, ""); + return m_clauses[0].get(); +} + +TryCatchClause const* TryStatement::structuredClause() const +{ + for (size_t i = 1; i < m_clauses.size(); ++i) + if (m_clauses[i]->errorName() == "Error") + return m_clauses[i].get(); + return nullptr; +} + +TryCatchClause const* TryStatement::fallbackClause() const +{ + for (size_t i = 1; i < m_clauses.size(); ++i) + if (m_clauses[i]->errorName().empty()) + return m_clauses[i].get(); + return nullptr; +} diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h index c0f7e6dc9..0ef56bbde 100644 --- a/libsolidity/ast/AST.h +++ b/libsolidity/ast/AST.h @@ -1451,6 +1451,10 @@ public: Expression const& externalCall() const { return *m_externalCall; } std::vector> const& clauses() const { return m_clauses; } + TryCatchClause const* successClause() const; + TryCatchClause const* structuredClause() const; + TryCatchClause const* fallbackClause() const; + private: ASTPointer m_externalCall; std::vector> m_clauses;