diff --git a/libsolidity/ast/AST.cpp b/libsolidity/ast/AST.cpp index bc8657126..657719340 100644 --- a/libsolidity/ast/AST.cpp +++ b/libsolidity/ast/AST.cpp @@ -30,7 +30,9 @@ #include #include +#include #include +#include #include @@ -367,6 +369,11 @@ TypeDeclarationAnnotation& UserDefinedValueTypeDefinition::annotation() const return initAnnotation(); } +std::vector, std::optional>> UsingForDirective::functionsAndOperators() const +{ + return ranges::zip_view(m_functionsOrLibrary, m_operators) | ranges::to; +} + Type const* StructDefinition::type() const { solAssert(annotation().recursive.has_value(), "Requested struct type before DeclarationTypeChecker."); diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h index fccacce1e..7c22f1811 100644 --- a/libsolidity/ast/AST.h +++ b/libsolidity/ast/AST.h @@ -38,7 +38,6 @@ #include #include -#include #include #include @@ -692,7 +691,7 @@ public: /// @returns a list of functions or the single library. std::vector> const& functionsOrLibrary() const { return m_functionsOrLibrary; } - auto functionsAndOperators() const { return ranges::zip_view(m_functionsOrLibrary, m_operators); } + std::vector, std::optional>> functionsAndOperators() const; bool usesBraces() const { return m_usesBraces; } bool global() const { return m_global; } diff --git a/libsolidity/ast/ASTJsonExporter.cpp b/libsolidity/ast/ASTJsonExporter.cpp index 23aa0903f..d3815b37d 100644 --- a/libsolidity/ast/ASTJsonExporter.cpp +++ b/libsolidity/ast/ASTJsonExporter.cpp @@ -345,10 +345,10 @@ bool ASTJsonExporter::visit(UsingForDirective const& _node) } else { + auto const& functionAndOperators = _node.functionsAndOperators(); solAssert(_node.functionsAndOperators().size() == 1); - auto const& functionAndOperator = _node.functionsAndOperators().front(); - solAssert(!functionAndOperator.second.has_value()); - attributes.emplace_back("libraryName", toJson(*(functionAndOperator.first))); + solAssert(!functionAndOperators.front().second.has_value()); + attributes.emplace_back("libraryName", toJson(*(functionAndOperators.front().first))); } attributes.emplace_back("global", _node.global());