mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add "kind" field to ModifierInvocation AST json element.
This commit is contained in:
parent
7170c8ac60
commit
0519473059
@ -19,6 +19,8 @@ Bugfixes:
|
|||||||
* SMTChecker: Fix internal error on pushing to ``string`` casted to ``bytes``.
|
* SMTChecker: Fix internal error on pushing to ``string`` casted to ``bytes``.
|
||||||
|
|
||||||
AST Changes:
|
AST Changes:
|
||||||
|
* ModifierInvocation: Add ``kind`` field which can be ``modifierInvocation`` or ``baseConstructorSpecifier``.
|
||||||
|
|
||||||
|
|
||||||
### 0.8.2 (2021-03-02)
|
### 0.8.2 (2021-03-02)
|
||||||
|
|
||||||
|
@ -453,10 +453,19 @@ bool ASTJsonConverter::visit(ModifierDefinition const& _node)
|
|||||||
|
|
||||||
bool ASTJsonConverter::visit(ModifierInvocation const& _node)
|
bool ASTJsonConverter::visit(ModifierInvocation const& _node)
|
||||||
{
|
{
|
||||||
setJsonNode(_node, "ModifierInvocation", {
|
std::vector<pair<string, Json::Value>> attributes{
|
||||||
make_pair("modifierName", toJson(_node.name())),
|
make_pair("modifierName", toJson(_node.name())),
|
||||||
make_pair("arguments", _node.arguments() ? toJson(*_node.arguments()) : Json::nullValue)
|
make_pair("arguments", _node.arguments() ? toJson(*_node.arguments()) : Json::nullValue)
|
||||||
});
|
};
|
||||||
|
if (Declaration const* declaration = _node.name().annotation().referencedDeclaration)
|
||||||
|
{
|
||||||
|
if (dynamic_cast<ModifierDefinition const*>(declaration))
|
||||||
|
attributes.emplace_back("kind", "modifierInvocation");
|
||||||
|
else if (FunctionDefinition const* function = dynamic_cast<FunctionDefinition const*>(declaration))
|
||||||
|
if (function->isConstructor())
|
||||||
|
attributes.emplace_back("kind", "baseConstructorSpecifier");
|
||||||
|
}
|
||||||
|
setJsonNode(_node, "ModifierInvocation", move(attributes));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
216
test/libsolidity/ASTJSON/base_constructor_call.json
Normal file
216
test/libsolidity/ASTJSON/base_constructor_call.json
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
{
|
||||||
|
"absolutePath": "a",
|
||||||
|
"exportedSymbols":
|
||||||
|
{
|
||||||
|
"A":
|
||||||
|
[
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"C":
|
||||||
|
[
|
||||||
|
17
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"id": 18,
|
||||||
|
"nodeType": "SourceUnit",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"abstract": false,
|
||||||
|
"baseContracts": [],
|
||||||
|
"contractDependencies": [],
|
||||||
|
"contractKind": "contract",
|
||||||
|
"fullyImplemented": true,
|
||||||
|
"id": 7,
|
||||||
|
"linearizedBaseContracts":
|
||||||
|
[
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"name": "A",
|
||||||
|
"nameLocation": "9:1:1",
|
||||||
|
"nodeType": "ContractDefinition",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"body":
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"nodeType": "Block",
|
||||||
|
"src": "31:2:1",
|
||||||
|
"statements": []
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"implemented": true,
|
||||||
|
"kind": "constructor",
|
||||||
|
"modifiers": [],
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "FunctionDefinition",
|
||||||
|
"parameters":
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"constant": false,
|
||||||
|
"id": 2,
|
||||||
|
"mutability": "mutable",
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "VariableDeclaration",
|
||||||
|
"scope": 6,
|
||||||
|
"src": "25:4:1",
|
||||||
|
"stateVariable": false,
|
||||||
|
"storageLocation": "default",
|
||||||
|
"typeDescriptions":
|
||||||
|
{
|
||||||
|
"typeIdentifier": "t_uint256",
|
||||||
|
"typeString": "uint256"
|
||||||
|
},
|
||||||
|
"typeName":
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "uint",
|
||||||
|
"nodeType": "ElementaryTypeName",
|
||||||
|
"src": "25:4:1",
|
||||||
|
"typeDescriptions":
|
||||||
|
{
|
||||||
|
"typeIdentifier": "t_uint256",
|
||||||
|
"typeString": "uint256"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"visibility": "internal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "24:6:1"
|
||||||
|
},
|
||||||
|
"returnParameters":
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "31:0:1"
|
||||||
|
},
|
||||||
|
"scope": 7,
|
||||||
|
"src": "13:20:1",
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"virtual": false,
|
||||||
|
"visibility": "public"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scope": 18,
|
||||||
|
"src": "0:35:1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"abstract": false,
|
||||||
|
"baseContracts":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"baseName":
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"name": "A",
|
||||||
|
"nodeType": "IdentifierPath",
|
||||||
|
"referencedDeclaration": 7,
|
||||||
|
"src": "50:1:1"
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
|
"nodeType": "InheritanceSpecifier",
|
||||||
|
"src": "50:1:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"contractDependencies":
|
||||||
|
[
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"contractKind": "contract",
|
||||||
|
"fullyImplemented": true,
|
||||||
|
"id": 17,
|
||||||
|
"linearizedBaseContracts":
|
||||||
|
[
|
||||||
|
17,
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"name": "C",
|
||||||
|
"nameLocation": "45:1:1",
|
||||||
|
"nodeType": "ContractDefinition",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"body":
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"nodeType": "Block",
|
||||||
|
"src": "73:2:1",
|
||||||
|
"statements": []
|
||||||
|
},
|
||||||
|
"id": 16,
|
||||||
|
"implemented": true,
|
||||||
|
"kind": "constructor",
|
||||||
|
"modifiers":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"arguments":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"hexValue": "32",
|
||||||
|
"id": 12,
|
||||||
|
"isConstant": false,
|
||||||
|
"isLValue": false,
|
||||||
|
"isPure": true,
|
||||||
|
"kind": "number",
|
||||||
|
"lValueRequested": false,
|
||||||
|
"nodeType": "Literal",
|
||||||
|
"src": "70:1:1",
|
||||||
|
"typeDescriptions":
|
||||||
|
{
|
||||||
|
"typeIdentifier": "t_rational_2_by_1",
|
||||||
|
"typeString": "int_const 2"
|
||||||
|
},
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 13,
|
||||||
|
"modifierName":
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"name": "A",
|
||||||
|
"nodeType": "IdentifierPath",
|
||||||
|
"referencedDeclaration": 7,
|
||||||
|
"src": "68:1:1"
|
||||||
|
},
|
||||||
|
"nodeType": "ModifierInvocation",
|
||||||
|
"src": "68:4:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "FunctionDefinition",
|
||||||
|
"parameters":
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "65:2:1"
|
||||||
|
},
|
||||||
|
"returnParameters":
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "73:0:1"
|
||||||
|
},
|
||||||
|
"scope": 17,
|
||||||
|
"src": "54:21:1",
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"virtual": false,
|
||||||
|
"visibility": "public"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scope": 18,
|
||||||
|
"src": "36:41:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "0:78:1"
|
||||||
|
}
|
4
test/libsolidity/ASTJSON/base_constructor_call.sol
Normal file
4
test/libsolidity/ASTJSON/base_constructor_call.sol
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
contract A { constructor(uint) {} }
|
||||||
|
contract C is A { constructor() A(2) {} }
|
||||||
|
|
||||||
|
// ----
|
166
test/libsolidity/ASTJSON/base_constructor_call_parseOnly.json
Normal file
166
test/libsolidity/ASTJSON/base_constructor_call_parseOnly.json
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
{
|
||||||
|
"absolutePath": "a",
|
||||||
|
"id": 18,
|
||||||
|
"nodeType": "SourceUnit",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"abstract": false,
|
||||||
|
"baseContracts": [],
|
||||||
|
"contractDependencies": [],
|
||||||
|
"contractKind": "contract",
|
||||||
|
"id": 7,
|
||||||
|
"name": "A",
|
||||||
|
"nameLocation": "9:1:1",
|
||||||
|
"nodeType": "ContractDefinition",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"body":
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"nodeType": "Block",
|
||||||
|
"src": "31:2:1",
|
||||||
|
"statements": []
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"implemented": true,
|
||||||
|
"kind": "constructor",
|
||||||
|
"modifiers": [],
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "FunctionDefinition",
|
||||||
|
"parameters":
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"constant": false,
|
||||||
|
"id": 2,
|
||||||
|
"mutability": "mutable",
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "VariableDeclaration",
|
||||||
|
"src": "25:4:1",
|
||||||
|
"stateVariable": false,
|
||||||
|
"storageLocation": "default",
|
||||||
|
"typeDescriptions": {},
|
||||||
|
"typeName":
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "uint",
|
||||||
|
"nodeType": "ElementaryTypeName",
|
||||||
|
"src": "25:4:1",
|
||||||
|
"typeDescriptions": {}
|
||||||
|
},
|
||||||
|
"visibility": "internal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "24:6:1"
|
||||||
|
},
|
||||||
|
"returnParameters":
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "31:0:1"
|
||||||
|
},
|
||||||
|
"src": "13:20:1",
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"virtual": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "0:35:1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"abstract": false,
|
||||||
|
"baseContracts":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"baseName":
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"name": "A",
|
||||||
|
"nodeType": "IdentifierPath",
|
||||||
|
"src": "50:1:1"
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
|
"nodeType": "InheritanceSpecifier",
|
||||||
|
"src": "50:1:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"contractDependencies": [],
|
||||||
|
"contractKind": "contract",
|
||||||
|
"id": 17,
|
||||||
|
"name": "C",
|
||||||
|
"nameLocation": "45:1:1",
|
||||||
|
"nodeType": "ContractDefinition",
|
||||||
|
"nodes":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"body":
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"nodeType": "Block",
|
||||||
|
"src": "73:2:1",
|
||||||
|
"statements": []
|
||||||
|
},
|
||||||
|
"id": 16,
|
||||||
|
"implemented": true,
|
||||||
|
"kind": "constructor",
|
||||||
|
"modifiers":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"arguments":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"hexValue": "32",
|
||||||
|
"id": 12,
|
||||||
|
"kind": "number",
|
||||||
|
"nodeType": "Literal",
|
||||||
|
"src": "70:1:1",
|
||||||
|
"typeDescriptions": {},
|
||||||
|
"value": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 13,
|
||||||
|
"modifierName":
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"name": "A",
|
||||||
|
"nodeType": "IdentifierPath",
|
||||||
|
"src": "68:1:1"
|
||||||
|
},
|
||||||
|
"nodeType": "ModifierInvocation",
|
||||||
|
"src": "68:4:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "",
|
||||||
|
"nameLocation": "-1:-1:-1",
|
||||||
|
"nodeType": "FunctionDefinition",
|
||||||
|
"parameters":
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "65:2:1"
|
||||||
|
},
|
||||||
|
"returnParameters":
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"nodeType": "ParameterList",
|
||||||
|
"parameters": [],
|
||||||
|
"src": "73:0:1"
|
||||||
|
},
|
||||||
|
"src": "54:21:1",
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"virtual": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "36:41:1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"src": "0:78:1"
|
||||||
|
}
|
@ -125,6 +125,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 10,
|
"id": 10,
|
||||||
|
"kind": "modifierInvocation",
|
||||||
"modifierName":
|
"modifierName":
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
|
@ -125,6 +125,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"id": 10,
|
"id": 10,
|
||||||
|
"kind": "modifierInvocation",
|
||||||
"modifierName":
|
"modifierName":
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
|
Loading…
Reference in New Issue
Block a user