prefixChanges and contractKind-field

This commit is contained in:
djuju 2017-05-05 16:15:09 +02:00 committed by djudjuu
parent 2fa7646944
commit a4ba5ace8a
2 changed files with 24 additions and 13 deletions

View File

@ -242,7 +242,7 @@ bool ASTJsonConverter::visit(ContractDefinition const& _node)
{
setJsonNode(_node, "ContractDefinition", {
make_pair("name", _node.name()),
make_pair("isLibrary", _node.isLibrary()),
make_pair("contractKind", contractKind(_node.contractKind())),
make_pair("fullyImplemented", _node.annotation().isFullyImplemented),
make_pair("linearizedBaseContracts", getContainerIds(_node.annotation().linearizedBaseContracts)),
make_pair("baseContracts", toJson(_node.baseContracts())),
@ -265,7 +265,7 @@ bool ASTJsonConverter::visit(InheritanceSpecifier const& _node)
bool ASTJsonConverter::visit(UsingForDirective const& _node)
{
setJsonNode(_node, "UsingForDirective", {
make_pair("libraryNames", toJson(_node.libraryName())),
make_pair("libraryName", toJson(_node.libraryName())),
make_pair("typeName", _node.typeName() ? toJson(*_node.typeName()) : Json::nullValue)
});
return false;
@ -321,7 +321,7 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node)
make_pair("returnParameters", toJson(*_node.returnParameterList())),
make_pair("modifiers", toJson(_node.modifiers())),
make_pair("body", _node.isImplemented() ? toJson(_node.body()) : Json::nullValue),
make_pair("isImplemented", _node.isImplemented()),
make_pair("implemented", _node.isImplemented()),
make_pair("scope", idOrNull(_node.scope()))
};
setJsonNode(_node, "FunctionDefinition", std::move(attributes));
@ -438,18 +438,13 @@ bool ASTJsonConverter::visit(ArrayTypeName const& _node)
bool ASTJsonConverter::visit(InlineAssembly const& _node)
{
std::map<assembly::Identifier const*, Declaration const*>::iterator it;
Json::Value externalReferences(Json::arrayValue);
for (
it = _node.annotation().externalReferences.begin();
it != _node.annotation().externalReferences.end();
it++
)
for (auto const& it : _node.annotation().externalReferences)
{
if (it->first && it->second)
if (it.first && it.second)
{
Json::Value tuple(Json::objectValue);
tuple[it->first->name] = nodeId(*it->second);
tuple[it.first->name] = nodeId(*it.second);
externalReferences.append(tuple);
}
}
@ -500,7 +495,7 @@ bool ASTJsonConverter::visit(WhileStatement const& _node)
bool ASTJsonConverter::visit(ForStatement const& _node)
{
setJsonNode(_node, "ForStatement", {
make_pair("initExpression", toJsonOrNull(_node.initializationExpression())),
make_pair("initializationExpression", toJsonOrNull(_node.initializationExpression())),
make_pair("condition", toJsonOrNull(_node.condition())),
make_pair("loopExpression", toJsonOrNull(_node.loopExpression())),
make_pair("body", toJson(_node.body()))
@ -623,7 +618,7 @@ bool ASTJsonConverter::visit(FunctionCall const& _node)
names.append(Json::Value(*name));
std::vector<pair<string, Json::Value>> attributes = {
make_pair(m_legacy ? "type_conversion" : "isTypeConversion", _node.annotation().isTypeConversion),
make_pair("isStructContstructorCall", _node.annotation().isStructConstructorCall),
make_pair("isStructConstructorCall", _node.annotation().isStructConstructorCall),
make_pair("expression", toJson(_node.expression())),
make_pair("names", std::move(names)),
make_pair("arguments", toJson(_node.arguments()))
@ -752,6 +747,21 @@ string ASTJsonConverter::location(VariableDeclaration::Location _location)
}
}
string ASTJsonConverter::contractKind(ContractDefinition::ContractKind _kind)
{
switch (_kind)
{
case ContractDefinition::ContractKind::Interface:
return "interface";
case ContractDefinition::ContractKind::Contract:
return "contract";
case ContractDefinition::ContractKind::Library:
return "library";
default:
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Unknown contract kind."));
}
}
string ASTJsonConverter::type(Expression const& _expression)
{
return _expression.annotation().type ? _expression.annotation().type->toString() : "Unknown";

View File

@ -130,6 +130,7 @@ private:
}
std::string visibility(Declaration::Visibility const& _visibility);
std::string location(VariableDeclaration::Location _location);
std::string contractKind(ContractDefinition::ContractKind _kind);
std::string type(Expression const& _expression);
std::string type(VariableDeclaration const& _varDecl);
int nodeId(ASTNode const& _node)