Skip to content

Commit a8579cd

Browse files
committed
Implemented ASTJson import export for UserDefinedValueType
Also added a test.
1 parent 237c1e5 commit a8579cd

File tree

7 files changed

+682
-0
lines changed

7 files changed

+682
-0
lines changed

libsolidity/ast/ASTJsonConverter.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,20 @@ bool ASTJsonConverter::visit(EnumValue const& _node)
353353
return false;
354354
}
355355

356+
bool ASTJsonConverter::visit(UserDefinedValueType const& _node)
357+
{
358+
solAssert(_node.typeName(), "");
359+
std::vector<pair<string, Json::Value>> attributes = {
360+
make_pair("name", _node.name()),
361+
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
362+
make_pair("typeName", toJson(*_node.typeName()))
363+
};
364+
365+
setJsonNode(_node, "UserDefinedValueTypeDefinition", std::move(attributes));
366+
367+
return false;
368+
}
369+
356370
bool ASTJsonConverter::visit(ParameterList const& _node)
357371
{
358372
setJsonNode(_node, "ParameterList", {

libsolidity/ast/ASTJsonConverter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class ASTJsonConverter: public ASTConstVisitor
8181
bool visit(StructDefinition const& _node) override;
8282
bool visit(EnumDefinition const& _node) override;
8383
bool visit(EnumValue const& _node) override;
84+
bool visit(UserDefinedValueType const& _node) override;
8485
bool visit(ParameterList const& _node) override;
8586
bool visit(OverrideSpecifier const& _node) override;
8687
bool visit(FunctionDefinition const& _node) override;

libsolidity/ast/ASTJsonImporter.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ ASTPointer<ASTNode> ASTJsonImporter::convertJsonToASTNode(Json::Value const& _js
133133
return createEnumDefinition(_json);
134134
if (nodeType == "EnumValue")
135135
return createEnumValue(_json);
136+
if (nodeType == "UserDefinedValueTypeDefinition")
137+
return createUserDefinedValueTypeDefinition(_json);
136138
if (nodeType == "ParameterList")
137139
return createParameterList(_json);
138140
if (nodeType == "OverrideSpecifier")
@@ -387,6 +389,16 @@ ASTPointer<EnumValue> ASTJsonImporter::createEnumValue(Json::Value const& _node)
387389
);
388390
}
389391

392+
ASTPointer<UserDefinedValueType> ASTJsonImporter::createUserDefinedValueTypeDefinition(Json::Value const& _node)
393+
{
394+
return createASTNode<UserDefinedValueType>(
395+
_node,
396+
memberAsASTString(_node, "name"),
397+
createNameSourceLocation(_node),
398+
convertJsonToASTNode<TypeName>(member(_node, "typeName"))
399+
);
400+
}
401+
390402
ASTPointer<ParameterList> ASTJsonImporter::createParameterList(Json::Value const& _node)
391403
{
392404
std::vector<ASTPointer<VariableDeclaration>> parameters;

libsolidity/ast/ASTJsonImporter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class ASTJsonImporter
8181
ASTPointer<ASTNode> createStructDefinition(Json::Value const& _node);
8282
ASTPointer<EnumDefinition> createEnumDefinition(Json::Value const& _node);
8383
ASTPointer<EnumValue> createEnumValue(Json::Value const& _node);
84+
ASTPointer<UserDefinedValueType> createUserDefinedValueTypeDefinition(Json::Value const& _node);
8485
ASTPointer<ParameterList> createParameterList(Json::Value const& _node);
8586
ASTPointer<OverrideSpecifier> createOverrideSpecifier(Json::Value const& _node);
8687
ASTPointer<FunctionDefinition> createFunctionDefinition(Json::Value const& _node);

0 commit comments

Comments
 (0)