Include visibility level for functions in AST

This commit is contained in:
Federico Bond 2016-12-12 16:21:57 -03:00
parent e53fdb4933
commit 9ed65f2ab9
2 changed files with 22 additions and 7 deletions

View File

@ -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";

View File

@ -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()