diff options
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.cpp | 21 | ||||
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.h | 1 |
2 files changed, 20 insertions, 2 deletions
diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index cdf70cf9..e1bcf6a1 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -704,13 +704,13 @@ bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node) bool ASTJsonConverter::visit(Literal const& _node) { - char const* tokenString = Token::toString(_node.token()); + string tokenString = tokenKind(_node.token()); Json::Value value{_node.value()}; if (!dev::validateUTF8(_node.value())) value = Json::nullValue; Token::Value subdenomination = Token::Value(_node.subDenomination()); std::vector<pair<string, Json::Value>> attributes = { - make_pair("token", tokenString ? tokenString : Json::Value()), + make_pair(m_legacy ? "token" : "kind", tokenString), make_pair("value", value), make_pair(m_legacy ? "hexvalue" : "hexValue", toHex(_node.value())), make_pair( @@ -793,6 +793,23 @@ string ASTJsonConverter::functionCallKind(FunctionCallKind _kind) } } +string ASTJsonConverter::tokenKind(Token::Value _token) +{ + switch (_token) + { + case dev::solidity::Token::Number: + return "number"; + case dev::solidity::Token::StringLiteral: + return "string"; + case dev::solidity::Token::TrueLiteral: + return "bool"; + case dev::solidity::Token::FalseLiteral: + return "bool"; + default: + BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Unknown kind of literal token.")); + } +} + 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 5ee40536..746b3f78 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -133,6 +133,7 @@ private: std::string location(VariableDeclaration::Location _location); std::string contractKind(ContractDefinition::ContractKind _kind); std::string functionCallKind(FunctionCallKind _kind); + std::string tokenKind(Token::Value _token); std::string type(Expression const& _expression); std::string type(VariableDeclaration const& _varDecl); int nodeId(ASTNode const& _node) |