diff options
author | chriseth <chris@ethereum.org> | 2017-06-06 21:09:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-06 21:09:48 +0800 |
commit | 1fba98496608db555cc29f62eb95c623ca0b4346 (patch) | |
tree | 625ba96b09871abbe32a4dbe5aa6b084d1f64336 | |
parent | 243e389fd7b3dc6c893c6021514d04f3b2bb035e (diff) | |
parent | 62eafdd0103a05d46295fc9b83039adb038683e8 (diff) | |
download | dexon-solidity-1fba98496608db555cc29f62eb95c623ca0b4346.tar.gz dexon-solidity-1fba98496608db555cc29f62eb95c623ca0b4346.tar.zst dexon-solidity-1fba98496608db555cc29f62eb95c623ca0b4346.zip |
Merge pull request #2332 from ethereum/fixLiteralPrint
fix Literalprint
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.cpp | 19 | ||||
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.h | 1 | ||||
-rw-r--r-- | test/libsolidity/ASTJSON.cpp | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index cdf70cf9..1de2e801 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -704,13 +704,12 @@ bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node) bool ASTJsonConverter::visit(Literal const& _node) { - char const* tokenString = Token::toString(_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", literalTokenKind(_node.token())), make_pair("value", value), make_pair(m_legacy ? "hexvalue" : "hexValue", toHex(_node.value())), make_pair( @@ -793,6 +792,22 @@ string ASTJsonConverter::functionCallKind(FunctionCallKind _kind) } } +string ASTJsonConverter::literalTokenKind(Token::Value _token) +{ + switch (_token) + { + case dev::solidity::Token::Number: + return "number"; + case dev::solidity::Token::StringLiteral: + return "string"; + case dev::solidity::Token::TrueLiteral: + 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..c2de5c48 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 literalTokenKind(Token::Value _token); std::string type(Expression const& _expression); std::string type(VariableDeclaration const& _varDecl); int nodeId(ASTNode const& _node) diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 8a790347..df7fac51 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -192,7 +192,7 @@ BOOST_AUTO_TEST_CASE(non_utf8) Json::Value literal = astJson["children"][0]["children"][0]["children"][2]["children"][0]["children"][1]; BOOST_CHECK_EQUAL(literal["name"], "Literal"); BOOST_CHECK_EQUAL(literal["attributes"]["hexvalue"], "ff"); - BOOST_CHECK_EQUAL(literal["attributes"]["token"], Json::nullValue); + BOOST_CHECK_EQUAL(literal["attributes"]["token"], "string"); BOOST_CHECK_EQUAL(literal["attributes"]["value"], Json::nullValue); BOOST_CHECK(literal["attributes"]["type"].asString().find("invalid") != string::npos); } |