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,
|
initializer_list<pair<string const, Json::Value const>> _attributes,
|
||||||
bool _hasChildren = false
|
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;
|
Json::Value node;
|
||||||
|
|
||||||
@ -183,11 +198,18 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node)
|
|||||||
|
|
||||||
bool ASTJsonConverter::visit(VariableDeclaration 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("name", _node.name()),
|
||||||
make_pair("type", type(_node))
|
make_pair("type", type(_node)),
|
||||||
}, true);
|
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;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ASTJsonConverter::visit(ModifierDefinition const& _node)
|
bool ASTJsonConverter::visit(ModifierDefinition const& _node)
|
||||||
@ -209,6 +231,7 @@ bool ASTJsonConverter::visit(TypeName const&)
|
|||||||
|
|
||||||
bool ASTJsonConverter::visit(EventDefinition const& _node)
|
bool ASTJsonConverter::visit(EventDefinition const& _node)
|
||||||
{
|
{
|
||||||
|
m_inEvent = true;
|
||||||
addJsonNode(_node, "EventDefinition", { make_pair("name", _node.name()) }, true);
|
addJsonNode(_node, "EventDefinition", { make_pair("name", _node.name()) }, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -502,6 +525,7 @@ void ASTJsonConverter::endVisit(ModifierInvocation const&)
|
|||||||
|
|
||||||
void ASTJsonConverter::endVisit(EventDefinition const&)
|
void ASTJsonConverter::endVisit(EventDefinition const&)
|
||||||
{
|
{
|
||||||
|
m_inEvent = false;
|
||||||
goUp();
|
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)
|
string ASTJsonConverter::type(Expression const& _expression)
|
||||||
{
|
{
|
||||||
return _expression.annotation().type ? _expression.annotation().type->toString() : "Unknown";
|
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,
|
std::initializer_list<std::pair<std::string const, Json::Value const>> _attributes,
|
||||||
bool _hasChildren
|
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 sourceLocationToString(SourceLocation const& _location) const;
|
||||||
std::string visibility(Declaration::Visibility const& _visibility);
|
std::string visibility(Declaration::Visibility const& _visibility);
|
||||||
|
std::string location(VariableDeclaration::Location _location);
|
||||||
std::string type(Expression const& _expression);
|
std::string type(Expression const& _expression);
|
||||||
std::string type(VariableDeclaration const& _varDecl);
|
std::string type(VariableDeclaration const& _varDecl);
|
||||||
inline void goUp()
|
inline void goUp()
|
||||||
@ -161,6 +168,7 @@ private:
|
|||||||
m_jsonNodePtrs.pop();
|
m_jsonNodePtrs.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool m_inEvent = false; ///< whether we are currently inside an event or not
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
Json::Value m_astJson;
|
Json::Value m_astJson;
|
||||||
std::stack<Json::Value*> m_jsonNodePtrs;
|
std::stack<Json::Value*> m_jsonNodePtrs;
|
||||||
|
Loading…
Reference in New Issue
Block a user