mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
commit
c37397c178
@ -39,6 +39,21 @@ void ASTJsonConverter::addJsonNode(
|
||||
initializer_list<pair<string const, Json::Value const>> _attributes,
|
||||
bool _hasChildren = false
|
||||
)
|
||||
{
|
||||
ASTJsonConverter::addJsonNode(
|
||||
_node,
|
||||
_nodeName,
|
||||
std::vector<pair<string const, Json::Value const>>(_attributes),
|
||||
_hasChildren
|
||||
);
|
||||
}
|
||||
|
||||
void ASTJsonConverter::addJsonNode(
|
||||
ASTNode const& _node,
|
||||
string const& _nodeName,
|
||||
std::vector<pair<string const, Json::Value const>> const& _attributes,
|
||||
bool _hasChildren = false
|
||||
)
|
||||
{
|
||||
Json::Value node;
|
||||
|
||||
@ -183,11 +198,18 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node)
|
||||
|
||||
bool ASTJsonConverter::visit(VariableDeclaration const& _node)
|
||||
{
|
||||
addJsonNode(_node, "VariableDeclaration", {
|
||||
std::vector<pair<string const, Json::Value const>> attributes = {
|
||||
make_pair("name", _node.name()),
|
||||
make_pair("type", type(_node))
|
||||
}, true);
|
||||
make_pair("type", type(_node)),
|
||||
make_pair("constant", _node.isConstant()),
|
||||
make_pair("storageLocation", location(_node.referenceLocation())),
|
||||
make_pair("visibility", visibility(_node.visibility()))
|
||||
};
|
||||
if (m_inEvent)
|
||||
attributes.push_back(make_pair("indexed", _node.isIndexed()));
|
||||
addJsonNode(_node, "VariableDeclaration", attributes, true);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
bool ASTJsonConverter::visit(ModifierDefinition const& _node)
|
||||
@ -209,6 +231,7 @@ bool ASTJsonConverter::visit(TypeName const&)
|
||||
|
||||
bool ASTJsonConverter::visit(EventDefinition const& _node)
|
||||
{
|
||||
m_inEvent = true;
|
||||
addJsonNode(_node, "EventDefinition", { make_pair("name", _node.name()) }, true);
|
||||
return true;
|
||||
}
|
||||
@ -502,6 +525,7 @@ void ASTJsonConverter::endVisit(ModifierInvocation const&)
|
||||
|
||||
void ASTJsonConverter::endVisit(EventDefinition const&)
|
||||
{
|
||||
m_inEvent = false;
|
||||
goUp();
|
||||
}
|
||||
|
||||
@ -670,6 +694,21 @@ string ASTJsonConverter::visibility(Declaration::Visibility const& _visibility)
|
||||
}
|
||||
}
|
||||
|
||||
string ASTJsonConverter::location(VariableDeclaration::Location _location)
|
||||
{
|
||||
switch (_location)
|
||||
{
|
||||
case VariableDeclaration::Location::Default:
|
||||
return "default";
|
||||
case VariableDeclaration::Location::Storage:
|
||||
return "storage";
|
||||
case VariableDeclaration::Location::Memory:
|
||||
return "memory";
|
||||
default:
|
||||
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Unknown declaration location."));
|
||||
}
|
||||
}
|
||||
|
||||
string ASTJsonConverter::type(Expression const& _expression)
|
||||
{
|
||||
return _expression.annotation().type ? _expression.annotation().type->toString() : "Unknown";
|
||||
|
@ -151,8 +151,15 @@ private:
|
||||
std::initializer_list<std::pair<std::string const, Json::Value const>> _attributes,
|
||||
bool _hasChildren
|
||||
);
|
||||
void addJsonNode(
|
||||
ASTNode const& _node,
|
||||
std::string const& _nodeName,
|
||||
std::vector<std::pair<std::string const, Json::Value const>> const& _attributes,
|
||||
bool _hasChildren
|
||||
);
|
||||
std::string sourceLocationToString(SourceLocation const& _location) const;
|
||||
std::string visibility(Declaration::Visibility const& _visibility);
|
||||
std::string location(VariableDeclaration::Location _location);
|
||||
std::string type(Expression const& _expression);
|
||||
std::string type(VariableDeclaration const& _varDecl);
|
||||
inline void goUp()
|
||||
@ -161,6 +168,7 @@ private:
|
||||
m_jsonNodePtrs.pop();
|
||||
}
|
||||
|
||||
bool m_inEvent = false; ///< whether we are currently inside an event or not
|
||||
bool processed = false;
|
||||
Json::Value m_astJson;
|
||||
std::stack<Json::Value*> m_jsonNodePtrs;
|
||||
|
Loading…
Reference in New Issue
Block a user