From 9e7fc124633ae1503ab33f1842f0164d895f46d2 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Tue, 16 Aug 2016 13:25:25 +0000 Subject: Add a ast json converter for InheritanceSpecifier --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index c4134f4e..60a3fd0a 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -120,6 +120,12 @@ bool ASTJsonConverter::visit(ContractDefinition const& _node) return true; } +bool ASTJsonConverter::visit(InheritanceSpecifier const& _node) +{ + addJsonNode(_node, "Inheritance", { }, true); + return true; +} + bool ASTJsonConverter::visit(StructDefinition const& _node) { addJsonNode(_node, "Struct", { make_pair("name", _node.name()) }, true); @@ -345,6 +351,11 @@ void ASTJsonConverter::endVisit(ContractDefinition const&) goUp(); } +void ASTJsonConverter::endVisit(InheritanceSpecifier const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(StructDefinition const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index ca4d9c2d..fb32352d 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -53,6 +53,7 @@ public: bool visit(ImportDirective const& _node) override; bool visit(ContractDefinition const& _node) override; + bool visit(InheritanceSpecifier const& _node) override; bool visit(StructDefinition const& _node) override; bool visit(ParameterList const& _node) override; bool visit(FunctionDefinition const& _node) override; @@ -87,6 +88,7 @@ public: void endVisit(ImportDirective const&) override; void endVisit(ContractDefinition const&) override; + void endVisit(InheritanceSpecifier const&) override; void endVisit(StructDefinition const&) override; void endVisit(ParameterList const&) override; void endVisit(FunctionDefinition const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 6d914391..997e0fe8 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -62,6 +62,20 @@ BOOST_AUTO_TEST_CASE(source_location) BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["src"], "13:32:1"); } +BOOST_AUTO_TEST_CASE(inheritance_specifier) +{ + CompilerStack c; + c.addSource("a", "contract C1 {} contract C2 is C1 {}"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + BOOST_CHECK_EQUAL(astJson["children"][1]["attributes"]["name"], "C2"); + BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["name"], "Inheritance"); + BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["name"], "UserDefinedTypeName"); + BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["attributes"]["name"], "C1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From 40ca2c9e977b98083efed96f031c298cf65d0893 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Tue, 16 Aug 2016 14:28:28 +0000 Subject: Add ast json converter for UsingForDirective --- libsolidity/ast/ASTJsonConverter.cpp | 13 ++++++++++++- libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 60a3fd0a..9362b86b 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -122,7 +122,13 @@ bool ASTJsonConverter::visit(ContractDefinition const& _node) bool ASTJsonConverter::visit(InheritanceSpecifier const& _node) { - addJsonNode(_node, "Inheritance", { }, true); + addJsonNode(_node, "Inheritance", {}, true); + return true; +} + +bool ASTJsonConverter::visit(UsingForDirective const& _node) +{ + addJsonNode(_node, "UsingFor", {}, true); return true; } @@ -356,6 +362,11 @@ void ASTJsonConverter::endVisit(InheritanceSpecifier const&) goUp(); } +void ASTJsonConverter::endVisit(UsingForDirective const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(StructDefinition const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index fb32352d..8e25802a 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -54,6 +54,7 @@ public: bool visit(ImportDirective const& _node) override; bool visit(ContractDefinition const& _node) override; bool visit(InheritanceSpecifier const& _node) override; + bool visit(UsingForDirective const& _node) override; bool visit(StructDefinition const& _node) override; bool visit(ParameterList const& _node) override; bool visit(FunctionDefinition const& _node) override; @@ -89,6 +90,7 @@ public: void endVisit(ImportDirective const&) override; void endVisit(ContractDefinition const&) override; void endVisit(InheritanceSpecifier const&) override; + void endVisit(UsingForDirective const&) override; void endVisit(StructDefinition const&) override; void endVisit(ParameterList const&) override; void endVisit(FunctionDefinition const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 997e0fe8..c252b133 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -76,6 +76,23 @@ BOOST_AUTO_TEST_CASE(inheritance_specifier) BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["attributes"]["name"], "C1"); } +BOOST_AUTO_TEST_CASE(using_for_directive) +{ + CompilerStack c; + c.addSource("a", "library L {} contract C { using L for uint; }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value usingFor = astJson["children"][1]["children"][0]; + BOOST_CHECK_EQUAL(usingFor["name"], "UsingFor"); + BOOST_CHECK_EQUAL(usingFor["src"], "26:17:1"); + BOOST_CHECK_EQUAL(usingFor["children"][0]["name"], "UserDefinedTypeName"); + BOOST_CHECK_EQUAL(usingFor["children"][0]["attributes"]["name"], "L"); + BOOST_CHECK_EQUAL(usingFor["children"][1]["name"], "ElementaryTypeName"); + BOOST_CHECK_EQUAL(usingFor["children"][1]["attributes"]["name"], "uint"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From af64219e17f2a01c1a27e19873ab6b03bfd01bfd Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Tue, 16 Aug 2016 14:39:08 +0000 Subject: Check source loctaion in the InhertanceSpecifier test --- test/libsolidity/ASTJSON.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index c252b133..2dcdf0b4 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -72,6 +72,7 @@ BOOST_AUTO_TEST_CASE(inheritance_specifier) Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); BOOST_CHECK_EQUAL(astJson["children"][1]["attributes"]["name"], "C2"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["name"], "Inheritance"); + BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["src"], "30:2:1"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["name"], "UserDefinedTypeName"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["attributes"]["name"], "C1"); } -- cgit v1.2.3 From a9e04217a4f22eb9869a7830ba8f33bd72f2e452 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Tue, 16 Aug 2016 15:18:57 +0000 Subject: Add ast json converter for EnumDefinition --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 9362b86b..1b792694 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -138,6 +138,12 @@ bool ASTJsonConverter::visit(StructDefinition const& _node) return true; } +bool ASTJsonConverter::visit(EnumDefinition const& _node) +{ + addJsonNode(_node, "Enum", { make_pair("name", _node.name()) }, true); + return true; +} + bool ASTJsonConverter::visit(ParameterList const& _node) { addJsonNode(_node, "ParameterList", {}, true); @@ -372,6 +378,11 @@ void ASTJsonConverter::endVisit(StructDefinition const&) goUp(); } +void ASTJsonConverter::endVisit(EnumDefinition const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(ParameterList const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 8e25802a..4ee21803 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -56,6 +56,7 @@ public: bool visit(InheritanceSpecifier const& _node) override; bool visit(UsingForDirective const& _node) override; bool visit(StructDefinition const& _node) override; + bool visit(EnumDefinition const& _node) override; bool visit(ParameterList const& _node) override; bool visit(FunctionDefinition const& _node) override; bool visit(VariableDeclaration const& _node) override; @@ -92,6 +93,7 @@ public: void endVisit(InheritanceSpecifier const&) override; void endVisit(UsingForDirective const&) override; void endVisit(StructDefinition const&) override; + void endVisit(EnumDefinition const&) override; void endVisit(ParameterList const&) override; void endVisit(FunctionDefinition const&) override; void endVisit(VariableDeclaration const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 2dcdf0b4..58b17dd8 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -94,6 +94,20 @@ BOOST_AUTO_TEST_CASE(using_for_directive) BOOST_CHECK_EQUAL(usingFor["children"][1]["attributes"]["name"], "uint"); } +BOOST_AUTO_TEST_CASE(enum_definition) +{ + CompilerStack c; + c.addSource("a", "contract C { enum E {} }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value enumDefinition = astJson["children"][0]["children"][0]; + BOOST_CHECK_EQUAL(enumDefinition["name"], "Enum"); + BOOST_CHECK_EQUAL(enumDefinition["attributes"]["name"], "E"); + BOOST_CHECK_EQUAL(enumDefinition["src"], "13:9:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From 95832da16ea1577dd50e62212dd0ea620e2fcaeb Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Tue, 16 Aug 2016 15:38:24 +0000 Subject: Add ast json converter for EnumValue --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 17 +++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 1b792694..9af002a3 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -144,6 +144,12 @@ bool ASTJsonConverter::visit(EnumDefinition const& _node) return true; } +bool ASTJsonConverter::visit(EnumValue const& _node) +{ + addJsonNode(_node, "EnumValue", { make_pair("name", _node.name()) }, true); + return true; +} + bool ASTJsonConverter::visit(ParameterList const& _node) { addJsonNode(_node, "ParameterList", {}, true); @@ -383,6 +389,11 @@ void ASTJsonConverter::endVisit(EnumDefinition const&) goUp(); } +void ASTJsonConverter::endVisit(EnumValue const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(ParameterList const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 4ee21803..009c9607 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -57,6 +57,7 @@ public: bool visit(UsingForDirective const& _node) override; bool visit(StructDefinition const& _node) override; bool visit(EnumDefinition const& _node) override; + bool visit(EnumValue const& _node) override; bool visit(ParameterList const& _node) override; bool visit(FunctionDefinition const& _node) override; bool visit(VariableDeclaration const& _node) override; @@ -94,6 +95,7 @@ public: void endVisit(UsingForDirective const&) override; void endVisit(StructDefinition const&) override; void endVisit(EnumDefinition const&) override; + void endVisit(EnumValue const&) override; void endVisit(ParameterList const&) override; void endVisit(FunctionDefinition const&) override; void endVisit(VariableDeclaration const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 58b17dd8..1a9b6981 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -108,6 +108,23 @@ BOOST_AUTO_TEST_CASE(enum_definition) BOOST_CHECK_EQUAL(enumDefinition["src"], "13:9:1"); } +BOOST_AUTO_TEST_CASE(enum_value) +{ + CompilerStack c; + c.addSource("a", "contract C { enum E { A, B } }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value enumDefinition = astJson["children"][0]["children"][0]; + BOOST_CHECK_EQUAL(enumDefinition["children"][0]["name"], "EnumValue"); + BOOST_CHECK_EQUAL(enumDefinition["children"][0]["attributes"]["name"], "A"); + BOOST_CHECK_EQUAL(enumDefinition["children"][0]["src"], "22:1:1"); + BOOST_CHECK_EQUAL(enumDefinition["children"][1]["name"], "EnumValue"); + BOOST_CHECK_EQUAL(enumDefinition["children"][1]["attributes"]["name"], "B"); + BOOST_CHECK_EQUAL(enumDefinition["children"][1]["src"], "25:1:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From a5d15e6895212a034f459ba06fe0ca62ba5c0904 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Wed, 17 Aug 2016 14:23:20 +0000 Subject: Add ast json converter for ModifierDefinition --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 14 ++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 9af002a3..bcf2577a 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -175,6 +175,12 @@ bool ASTJsonConverter::visit(VariableDeclaration const& _node) return true; } +bool ASTJsonConverter::visit(ModifierDefinition const& _node) +{ + addJsonNode(_node, "ModifierDefinition", { make_pair("name", _node.name()) }, true); + return true; +} + bool ASTJsonConverter::visit(TypeName const&) { return true; @@ -409,6 +415,11 @@ void ASTJsonConverter::endVisit(VariableDeclaration const&) goUp(); } +void ASTJsonConverter::endVisit(ModifierDefinition const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(TypeName const&) { } diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 009c9607..7808d76f 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -61,6 +61,7 @@ public: bool visit(ParameterList const& _node) override; bool visit(FunctionDefinition const& _node) override; bool visit(VariableDeclaration const& _node) override; + bool visit(ModifierDefinition const& _node) override; bool visit(TypeName const& _node) override; bool visit(ElementaryTypeName const& _node) override; bool visit(UserDefinedTypeName const& _node) override; @@ -99,6 +100,7 @@ public: void endVisit(ParameterList const&) override; void endVisit(FunctionDefinition const&) override; void endVisit(VariableDeclaration const&) override; + void endVisit(ModifierDefinition const&) override; void endVisit(TypeName const&) override; void endVisit(ElementaryTypeName const&) override; void endVisit(UserDefinedTypeName const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 1a9b6981..04733055 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -125,6 +125,20 @@ BOOST_AUTO_TEST_CASE(enum_value) BOOST_CHECK_EQUAL(enumDefinition["children"][1]["src"], "25:1:1"); } +BOOST_AUTO_TEST_CASE(modifier_definition) +{ + CompilerStack c; + c.addSource("a", "contract C { modifier M(uint i) { _ } function F() M(1) {} }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value modifier = astJson["children"][0]["children"][0]; + BOOST_CHECK_EQUAL(modifier["name"], "ModifierDefinition"); + BOOST_CHECK_EQUAL(modifier["attributes"]["name"], "M"); + BOOST_CHECK_EQUAL(modifier["src"], "13:24:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From bdc2436ae38b9028311736ef52f36e3525227eb6 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Wed, 17 Aug 2016 14:52:14 +0000 Subject: Add ast json converter for ModifierInvocation and EventDefinition --- libsolidity/ast/ASTJsonConverter.cpp | 22 ++++++++++++++++++++++ libsolidity/ast/ASTJsonConverter.h | 4 ++++ test/libsolidity/ASTJSON.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index bcf2577a..b8d5f43e 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -181,11 +181,23 @@ bool ASTJsonConverter::visit(ModifierDefinition const& _node) return true; } +bool ASTJsonConverter::visit(ModifierInvocation const& _node) +{ + addJsonNode(_node, "Modifier", {}, true); + return true; +} + bool ASTJsonConverter::visit(TypeName const&) { return true; } +bool ASTJsonConverter::visit(EventDefinition const& _node) +{ + addJsonNode(_node, "Event", { make_pair("name", _node.name()) }, true); + return true; +} + bool ASTJsonConverter::visit(ElementaryTypeName const& _node) { addJsonNode(_node, "ElementaryTypeName", { make_pair("name", _node.typeName().toString()) }); @@ -420,6 +432,16 @@ void ASTJsonConverter::endVisit(ModifierDefinition const&) goUp(); } +void ASTJsonConverter::endVisit(ModifierInvocation const&) +{ + goUp(); +} + +void ASTJsonConverter::endVisit(EventDefinition const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(TypeName const&) { } diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 7808d76f..e26bab75 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -62,6 +62,8 @@ public: bool visit(FunctionDefinition const& _node) override; bool visit(VariableDeclaration const& _node) override; bool visit(ModifierDefinition const& _node) override; + bool visit(ModifierInvocation const& _node) override; + bool visit(EventDefinition const& _node) override; bool visit(TypeName const& _node) override; bool visit(ElementaryTypeName const& _node) override; bool visit(UserDefinedTypeName const& _node) override; @@ -101,6 +103,8 @@ public: void endVisit(FunctionDefinition const&) override; void endVisit(VariableDeclaration const&) override; void endVisit(ModifierDefinition const&) override; + void endVisit(ModifierInvocation const&) override; + void endVisit(EventDefinition const&) override; void endVisit(TypeName const&) override; void endVisit(ElementaryTypeName const&) override; void endVisit(UserDefinedTypeName const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 04733055..69c42814 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -139,6 +139,36 @@ BOOST_AUTO_TEST_CASE(modifier_definition) BOOST_CHECK_EQUAL(modifier["src"], "13:24:1"); } +BOOST_AUTO_TEST_CASE(modifier_invocation) +{ + CompilerStack c; + c.addSource("a", "contract C { modifier M(uint i) { _ } function F() M(1) {} }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value modifier = astJson["children"][0]["children"][1]["children"][2]; + BOOST_CHECK_EQUAL(modifier["name"], "Modifier"); + BOOST_CHECK_EQUAL(modifier["src"], "51:4:1"); + BOOST_CHECK_EQUAL(modifier["children"][0]["attributes"]["type"], "modifier (uint256)"); + BOOST_CHECK_EQUAL(modifier["children"][0]["attributes"]["value"], "M"); + BOOST_CHECK_EQUAL(modifier["children"][1]["attributes"]["value"], "1"); +} + +BOOST_AUTO_TEST_CASE(event_definition) +{ + CompilerStack c; + c.addSource("a", "contract C { event E(); }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value event = astJson["children"][0]["children"][0]; + BOOST_CHECK_EQUAL(event["name"], "Event"); + BOOST_CHECK_EQUAL(event["attributes"]["name"], "E"); + BOOST_CHECK_EQUAL(event["src"], "13:10:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From e9c894c9f80b4a30560c1b88614cbd767abd908b Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Wed, 17 Aug 2016 15:09:21 +0000 Subject: Add ast json converter for ArrayTypeName --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 13 +++++++++++++ 3 files changed, 26 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index b8d5f43e..e839a8ca 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -218,6 +218,12 @@ bool ASTJsonConverter::visit(Mapping const& _node) return true; } +bool ASTJsonConverter::visit(ArrayTypeName const& _node) +{ + addJsonNode(_node, "ArrayTypeName", {}, true); + return true; +} + bool ASTJsonConverter::visit(InlineAssembly const& _node) { addJsonNode(_node, "InlineAssembly", {}, true); @@ -459,6 +465,11 @@ void ASTJsonConverter::endVisit(Mapping const&) goUp(); } +void ASTJsonConverter::endVisit(ArrayTypeName const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(InlineAssembly const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index e26bab75..14e4d3ae 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -68,6 +68,7 @@ public: bool visit(ElementaryTypeName const& _node) override; bool visit(UserDefinedTypeName const& _node) override; bool visit(Mapping const& _node) override; + bool visit(ArrayTypeName const& _node) override; bool visit(InlineAssembly const& _node) override; bool visit(Block const& _node) override; bool visit(IfStatement const& _node) override; @@ -109,6 +110,7 @@ public: void endVisit(ElementaryTypeName const&) override; void endVisit(UserDefinedTypeName const&) override; void endVisit(Mapping const&) override; + void endVisit(ArrayTypeName const&) override; void endVisit(InlineAssembly const&) override; void endVisit(Block const&) override; void endVisit(IfStatement const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 69c42814..1a213b23 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -169,6 +169,19 @@ BOOST_AUTO_TEST_CASE(event_definition) BOOST_CHECK_EQUAL(event["src"], "13:10:1"); } +BOOST_AUTO_TEST_CASE(array_type_name) +{ + CompilerStack c; + c.addSource("a", "contract C { uint[] i; }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value array = astJson["children"][0]["children"][0]["children"][0]; + BOOST_CHECK_EQUAL(array["name"], "ArrayTypeName"); + BOOST_CHECK_EQUAL(array["src"], "13:6:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From 406f3a4b5d3827f09e5f1035b79627dcc0e907d9 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Wed, 17 Aug 2016 15:20:17 +0000 Subject: Add ast json converter for PlaceholderStatement --- libsolidity/ast/ASTJsonConverter.cpp | 11 +++++++++++ libsolidity/ast/ASTJsonConverter.h | 2 ++ test/libsolidity/ASTJSON.cpp | 13 +++++++++++++ 3 files changed, 26 insertions(+) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index e839a8ca..fc5ad498 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -236,6 +236,12 @@ bool ASTJsonConverter::visit(Block const& _node) return true; } +bool ASTJsonConverter::visit(PlaceholderStatement const& _node) +{ + addJsonNode(_node, "Placeholder", {}, true); + return true; +} + bool ASTJsonConverter::visit(IfStatement const& _node) { addJsonNode(_node, "IfStatement", {}, true); @@ -480,6 +486,11 @@ void ASTJsonConverter::endVisit(Block const&) goUp(); } +void ASTJsonConverter::endVisit(PlaceholderStatement const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(IfStatement const&) { goUp(); diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 14e4d3ae..4f7e9e77 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -71,6 +71,7 @@ public: bool visit(ArrayTypeName const& _node) override; bool visit(InlineAssembly const& _node) override; bool visit(Block const& _node) override; + bool visit(PlaceholderStatement const& _node) override; bool visit(IfStatement const& _node) override; bool visit(WhileStatement const& _node) override; bool visit(ForStatement const& _node) override; @@ -113,6 +114,7 @@ public: void endVisit(ArrayTypeName const&) override; void endVisit(InlineAssembly const&) override; void endVisit(Block const&) override; + void endVisit(PlaceholderStatement const&) override; void endVisit(IfStatement const&) override; void endVisit(WhileStatement const&) override; void endVisit(ForStatement const&) override; diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 1a213b23..53222f65 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -182,6 +182,19 @@ BOOST_AUTO_TEST_CASE(array_type_name) BOOST_CHECK_EQUAL(array["src"], "13:6:1"); } +BOOST_AUTO_TEST_CASE(placeholder_statement) +{ + CompilerStack c; + c.addSource("a", "contract C { modifier M { _ } }"); + c.parse(); + map sourceIndices; + sourceIndices["a"] = 1; + Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); + Json::Value placeholder = astJson["children"][0]["children"][0]["children"][1]["children"][0]; + BOOST_CHECK_EQUAL(placeholder["name"], "Placeholder"); + BOOST_CHECK_EQUAL(placeholder["src"], "26:1:1"); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From 5061eb2b2b622ae6d1eb743962e53e6ceaf74798 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Thu, 18 Aug 2016 12:51:17 +0000 Subject: Move creation of the root element of JSON AST to the SourceUnit visitor --- libsolidity/ast/ASTJsonConverter.cpp | 21 ++++++++++++++++----- libsolidity/ast/ASTJsonConverter.h | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index fc5ad498..f793f5f1 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -89,11 +89,6 @@ ASTJsonConverter::ASTJsonConverter( map _sourceIndices ): m_ast(&_ast), m_sourceIndices(_sourceIndices) { - Json::Value children(Json::arrayValue); - - m_astJson["name"] = "root"; - m_astJson["children"] = children; - m_jsonNodePtrs.push(&m_astJson["children"]); } void ASTJsonConverter::print(ostream& _stream) @@ -108,6 +103,17 @@ Json::Value const& ASTJsonConverter::json() return m_astJson; } +bool ASTJsonConverter::visit(SourceUnit const&) +{ + Json::Value children(Json::arrayValue); + + m_astJson["name"] = "root"; + m_astJson["children"] = children; + m_jsonNodePtrs.push(&m_astJson["children"]); + + return true; +} + bool ASTJsonConverter::visit(ImportDirective const& _node) { addJsonNode(_node, "Import", { make_pair("file", _node.path())}); @@ -390,6 +396,11 @@ bool ASTJsonConverter::visit(Literal const& _node) return true; } +void ASTJsonConverter::endVisit(SourceUnit const&) +{ + goUp(); +} + void ASTJsonConverter::endVisit(ImportDirective const&) { } diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 4f7e9e77..192c4c4f 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -51,6 +51,7 @@ public: void print(std::ostream& _stream); Json::Value const& json(); + bool visit(SourceUnit const& _node) override; bool visit(ImportDirective const& _node) override; bool visit(ContractDefinition const& _node) override; bool visit(InheritanceSpecifier const& _node) override; @@ -94,6 +95,7 @@ public: bool visit(ElementaryTypeNameExpression const& _node) override; bool visit(Literal const& _node) override; + void endVisit(SourceUnit const&) override; void endVisit(ImportDirective const&) override; void endVisit(ContractDefinition const&) override; void endVisit(InheritanceSpecifier const&) override; -- cgit v1.2.3 From 9139d763d302ac2a1afbd9d28c9b0d0861a14d3e Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Thu, 18 Aug 2016 13:12:15 +0000 Subject: Use the full names for JSON AST nodes --- libsolidity/ast/ASTJsonConverter.cpp | 22 +++++++++++----------- test/libsolidity/ASTJSON.cpp | 16 ++++++++-------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index f793f5f1..c7a9d7ec 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -116,37 +116,37 @@ bool ASTJsonConverter::visit(SourceUnit const&) bool ASTJsonConverter::visit(ImportDirective const& _node) { - addJsonNode(_node, "Import", { make_pair("file", _node.path())}); + addJsonNode(_node, "ImportDirective", { make_pair("file", _node.path())}); return true; } bool ASTJsonConverter::visit(ContractDefinition const& _node) { - addJsonNode(_node, "Contract", { make_pair("name", _node.name()) }, true); + addJsonNode(_node, "ContractDefinition", { make_pair("name", _node.name()) }, true); return true; } bool ASTJsonConverter::visit(InheritanceSpecifier const& _node) { - addJsonNode(_node, "Inheritance", {}, true); + addJsonNode(_node, "InheritanceSpecifier", {}, true); return true; } bool ASTJsonConverter::visit(UsingForDirective const& _node) { - addJsonNode(_node, "UsingFor", {}, true); + addJsonNode(_node, "UsingForDirective", {}, true); return true; } bool ASTJsonConverter::visit(StructDefinition const& _node) { - addJsonNode(_node, "Struct", { make_pair("name", _node.name()) }, true); + addJsonNode(_node, "StructDefinition", { make_pair("name", _node.name()) }, true); return true; } bool ASTJsonConverter::visit(EnumDefinition const& _node) { - addJsonNode(_node, "Enum", { make_pair("name", _node.name()) }, true); + addJsonNode(_node, "EnumDefinition", { make_pair("name", _node.name()) }, true); return true; } @@ -164,7 +164,7 @@ bool ASTJsonConverter::visit(ParameterList const& _node) bool ASTJsonConverter::visit(FunctionDefinition const& _node) { - addJsonNode(_node, "Function", + addJsonNode(_node, "FunctionDefinition", { make_pair("name", _node.name()), make_pair("public", boost::lexical_cast(_node.isPublic())), make_pair("const", boost::lexical_cast(_node.isDeclaredConst())) }, @@ -189,7 +189,7 @@ bool ASTJsonConverter::visit(ModifierDefinition const& _node) bool ASTJsonConverter::visit(ModifierInvocation const& _node) { - addJsonNode(_node, "Modifier", {}, true); + addJsonNode(_node, "ModifierInvocation", {}, true); return true; } @@ -200,7 +200,7 @@ bool ASTJsonConverter::visit(TypeName const&) bool ASTJsonConverter::visit(EventDefinition const& _node) { - addJsonNode(_node, "Event", { make_pair("name", _node.name()) }, true); + addJsonNode(_node, "EventDefinition", { make_pair("name", _node.name()) }, true); return true; } @@ -244,7 +244,7 @@ bool ASTJsonConverter::visit(Block const& _node) bool ASTJsonConverter::visit(PlaceholderStatement const& _node) { - addJsonNode(_node, "Placeholder", {}, true); + addJsonNode(_node, "PlaceholderStatement", {}, true); return true; } @@ -292,7 +292,7 @@ bool ASTJsonConverter::visit(Throw const& _node) bool ASTJsonConverter::visit(VariableDeclarationStatement const& _node) { - addJsonNode(_node, "VariableDefinition", {}, true); + addJsonNode(_node, "VariableDefinitionStatement", {}, true); return true; } diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 53222f65..64624a2d 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -57,8 +57,8 @@ BOOST_AUTO_TEST_CASE(source_location) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); BOOST_CHECK_EQUAL(astJson["name"], "root"); - BOOST_CHECK_EQUAL(astJson["children"][0]["name"], "Contract"); - BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["name"], "Function"); + BOOST_CHECK_EQUAL(astJson["children"][0]["name"], "ContractDefinition"); + BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["name"], "FunctionDefinition"); BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["src"], "13:32:1"); } @@ -71,7 +71,7 @@ BOOST_AUTO_TEST_CASE(inheritance_specifier) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); BOOST_CHECK_EQUAL(astJson["children"][1]["attributes"]["name"], "C2"); - BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["name"], "Inheritance"); + BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["name"], "InheritanceSpecifier"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["src"], "30:2:1"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["name"], "UserDefinedTypeName"); BOOST_CHECK_EQUAL(astJson["children"][1]["children"][0]["children"][0]["attributes"]["name"], "C1"); @@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(using_for_directive) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); Json::Value usingFor = astJson["children"][1]["children"][0]; - BOOST_CHECK_EQUAL(usingFor["name"], "UsingFor"); + BOOST_CHECK_EQUAL(usingFor["name"], "UsingForDirective"); BOOST_CHECK_EQUAL(usingFor["src"], "26:17:1"); BOOST_CHECK_EQUAL(usingFor["children"][0]["name"], "UserDefinedTypeName"); BOOST_CHECK_EQUAL(usingFor["children"][0]["attributes"]["name"], "L"); @@ -103,7 +103,7 @@ BOOST_AUTO_TEST_CASE(enum_definition) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); Json::Value enumDefinition = astJson["children"][0]["children"][0]; - BOOST_CHECK_EQUAL(enumDefinition["name"], "Enum"); + BOOST_CHECK_EQUAL(enumDefinition["name"], "EnumDefinition"); BOOST_CHECK_EQUAL(enumDefinition["attributes"]["name"], "E"); BOOST_CHECK_EQUAL(enumDefinition["src"], "13:9:1"); } @@ -148,7 +148,7 @@ BOOST_AUTO_TEST_CASE(modifier_invocation) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); Json::Value modifier = astJson["children"][0]["children"][1]["children"][2]; - BOOST_CHECK_EQUAL(modifier["name"], "Modifier"); + BOOST_CHECK_EQUAL(modifier["name"], "ModifierInvocation"); BOOST_CHECK_EQUAL(modifier["src"], "51:4:1"); BOOST_CHECK_EQUAL(modifier["children"][0]["attributes"]["type"], "modifier (uint256)"); BOOST_CHECK_EQUAL(modifier["children"][0]["attributes"]["value"], "M"); @@ -164,7 +164,7 @@ BOOST_AUTO_TEST_CASE(event_definition) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); Json::Value event = astJson["children"][0]["children"][0]; - BOOST_CHECK_EQUAL(event["name"], "Event"); + BOOST_CHECK_EQUAL(event["name"], "EventDefinition"); BOOST_CHECK_EQUAL(event["attributes"]["name"], "E"); BOOST_CHECK_EQUAL(event["src"], "13:10:1"); } @@ -191,7 +191,7 @@ BOOST_AUTO_TEST_CASE(placeholder_statement) sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); Json::Value placeholder = astJson["children"][0]["children"][0]["children"][1]["children"][0]; - BOOST_CHECK_EQUAL(placeholder["name"], "Placeholder"); + BOOST_CHECK_EQUAL(placeholder["name"], "PlaceholderStatement"); BOOST_CHECK_EQUAL(placeholder["src"], "26:1:1"); } -- cgit v1.2.3 From 4387d8bbe3096864da6db478006493e491e8eda6 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Thu, 18 Aug 2016 13:29:44 +0000 Subject: Do not add children to EnumValue and PlaceholderStatement elements in JSON AST --- libsolidity/ast/ASTJsonConverter.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index c7a9d7ec..3ce572bf 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -152,7 +152,7 @@ bool ASTJsonConverter::visit(EnumDefinition const& _node) bool ASTJsonConverter::visit(EnumValue const& _node) { - addJsonNode(_node, "EnumValue", { make_pair("name", _node.name()) }, true); + addJsonNode(_node, "EnumValue", { make_pair("name", _node.name()) }); return true; } @@ -244,7 +244,7 @@ bool ASTJsonConverter::visit(Block const& _node) bool ASTJsonConverter::visit(PlaceholderStatement const& _node) { - addJsonNode(_node, "PlaceholderStatement", {}, true); + addJsonNode(_node, "PlaceholderStatement", {}); return true; } @@ -432,7 +432,6 @@ void ASTJsonConverter::endVisit(EnumDefinition const&) void ASTJsonConverter::endVisit(EnumValue const&) { - goUp(); } void ASTJsonConverter::endVisit(ParameterList const&) @@ -499,7 +498,6 @@ void ASTJsonConverter::endVisit(Block const&) void ASTJsonConverter::endVisit(PlaceholderStatement const&) { - goUp(); } void ASTJsonConverter::endVisit(IfStatement const&) -- cgit v1.2.3 From 4b9eb299d023989873528e6e52fdc8925d3fcda9 Mon Sep 17 00:00:00 2001 From: Alex Sinyagin Date: Thu, 18 Aug 2016 15:38:20 +0000 Subject: Rename root AST JSON node to SourceUnit --- libsolidity/ast/ASTJsonConverter.cpp | 2 +- test/libsolidity/ASTJSON.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 3ce572bf..d23c4890 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -107,7 +107,7 @@ bool ASTJsonConverter::visit(SourceUnit const&) { Json::Value children(Json::arrayValue); - m_astJson["name"] = "root"; + m_astJson["name"] = "SourceUnit"; m_astJson["children"] = children; m_jsonNodePtrs.push(&m_astJson["children"]); diff --git a/test/libsolidity/ASTJSON.cpp b/test/libsolidity/ASTJSON.cpp index 64624a2d..ec60b668 100644 --- a/test/libsolidity/ASTJSON.cpp +++ b/test/libsolidity/ASTJSON.cpp @@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(smoke_test) map sourceIndices; sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); - BOOST_CHECK_EQUAL(astJson["name"], "root"); + BOOST_CHECK_EQUAL(astJson["name"], "SourceUnit"); } BOOST_AUTO_TEST_CASE(source_location) @@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE(source_location) map sourceIndices; sourceIndices["a"] = 1; Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json(); - BOOST_CHECK_EQUAL(astJson["name"], "root"); + BOOST_CHECK_EQUAL(astJson["name"], "SourceUnit"); BOOST_CHECK_EQUAL(astJson["children"][0]["name"], "ContractDefinition"); BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["name"], "FunctionDefinition"); BOOST_CHECK_EQUAL(astJson["children"][0]["children"][0]["src"], "13:32:1"); -- cgit v1.2.3