diff options
author | Yoichi Hirai <i@yoichihirai.com> | 2016-12-15 00:23:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-15 00:23:14 +0800 |
commit | f8fe6e4f7c1f71756699ca31ce39cad2efd74557 (patch) | |
tree | 545e7daf406f87f830d0e4e075fa9ac22454cc30 | |
parent | e97ba77a45b871e7404d8ff5b6432b2f7090dc61 (diff) | |
parent | 9ed65f2ab9d5d6e67e07219006434356ce5c64ee (diff) | |
download | dexon-solidity-f8fe6e4f7c1f71756699ca31ce39cad2efd74557.tar.gz dexon-solidity-f8fe6e4f7c1f71756699ca31ce39cad2efd74557.tar.zst dexon-solidity-f8fe6e4f7c1f71756699ca31ce39cad2efd74557.zip |
Merge pull request #1503 from federicobond/json-visibility
Include visibility level for functions in AST
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.cpp | 28 | ||||
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.h | 1 |
2 files changed, 22 insertions, 7 deletions
diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 493707b9..abaad0fd 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -24,6 +24,7 @@ #include <boost/algorithm/string/join.hpp> #include <libdevcore/UTF8.h> #include <libsolidity/ast/AST.h> +#include <libsolidity/interface/Exceptions.h> using namespace std; @@ -173,9 +174,9 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node) { addJsonNode(_node, "FunctionDefinition", { make_pair("name", _node.name()), - make_pair("public", _node.isPublic()), make_pair("constant", _node.isDeclaredConst()), - make_pair("payable", _node.isPayable()) + make_pair("payable", _node.isPayable()), + make_pair("visibility", visibility(_node.visibility())) }, true); return true; } @@ -228,13 +229,9 @@ bool ASTJsonConverter::visit(UserDefinedTypeName const& _node) bool ASTJsonConverter::visit(FunctionTypeName const& _node) { - string visibility = "internal"; - if (_node.visibility() == Declaration::Visibility::External) - visibility = "external"; - addJsonNode(_node, "FunctionTypeName", { make_pair("payable", _node.isPayable()), - make_pair("visibility", visibility), + make_pair("visibility", visibility(_node.visibility())), make_pair("constant", _node.isDeclaredConst()) }, true); return true; @@ -656,6 +653,23 @@ void ASTJsonConverter::process() processed = true; } +string ASTJsonConverter::visibility(Declaration::Visibility const& _visibility) +{ + switch (_visibility) + { + case Declaration::Visibility::Private: + return "private"; + case Declaration::Visibility::Internal: + return "internal"; + case Declaration::Visibility::Public: + return "public"; + case Declaration::Visibility::External: + return "external"; + default: + BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Unknown declaration visibility.")); + } +} + string ASTJsonConverter::type(Expression const& _expression) { return _expression.annotation().type ? _expression.annotation().type->toString() : "Unknown"; diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 277476d5..49f23f99 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -152,6 +152,7 @@ private: bool _hasChildren ); std::string sourceLocationToString(SourceLocation const& _location) const; + std::string visibility(Declaration::Visibility const& _visibility); std::string type(Expression const& _expression); std::string type(VariableDeclaration const& _varDecl); inline void goUp() |