Tests and changelog

This commit is contained in:
hrkrshnn 2021-04-01 14:41:42 +02:00
parent b7795b86c1
commit e96a161115
6 changed files with 871 additions and 2 deletions

View File

@ -15,6 +15,7 @@ Compiler Features:
* Standard JSON: Model checker option ``settings.modelChecker.targets`` also accepts ``outOfBounds``.
* Yul Optimizer: Added a new step FunctionSpecializer, that specializes a function with its literal arguments.
* Yul EVM Code Transform: Stack Optimization: Reuse slots of unused function arguments and defer allocating stack slots for return variables until after expression statements and assignments that do not reference them.
* NatSpec: Allow ``@notice`` tag on non-public state variables and local variable declarations. The documentation will only be part of the AST, under the field ``documentation``.
Bugfixes:

View File

@ -0,0 +1,489 @@
{
"absolutePath": "a",
"exportedSymbols":
{
"C":
[
41
]
},
"id": 42,
"nodeType": "SourceUnit",
"nodes":
[
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"fullyImplemented": true,
"id": 41,
"linearizedBaseContracts":
[
41
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
{
"body":
{
"id": 26,
"nodeType": "Block",
"src": "42:330:1",
"statements":
[
{
"assignments":
[
5
],
"declarations":
[
{
"constant": false,
"id": 5,
"mutability": "mutable",
"name": "x",
"nameLocation": "114:1:1",
"nodeType": "VariableDeclaration",
"scope": 26,
"src": "109:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 4,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "109:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"documentation": "Documentation for x; will appear in ast json",
"id": 7,
"initialValue":
{
"hexValue": "31",
"id": 6,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "118:1:1",
"typeDescriptions":
{
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"nodeType": "VariableDeclarationStatement",
"src": "109:10:1"
},
{
"body":
{
"id": 24,
"nodeType": "Block",
"src": "270:96:1",
"statements":
[
{
"assignments":
[
21
],
"declarations":
[
{
"constant": false,
"id": 21,
"mutability": "mutable",
"name": "j",
"nameLocation": "350:1:1",
"nodeType": "VariableDeclaration",
"scope": 24,
"src": "345:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 20,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "345:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"documentation": "documentation for j; will appear in ast json",
"id": 23,
"initialValue":
{
"hexValue": "30",
"id": 22,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "354:1:1",
"typeDescriptions":
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "345:10:1"
}
]
},
"condition":
{
"commonType":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 15,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression":
{
"id": 13,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10,
"src": "236:1:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression":
{
"hexValue": "3130",
"id": 14,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "240:2:1",
"typeDescriptions":
{
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"src": "236:6:1",
"typeDescriptions":
{
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 25,
"initializationExpression":
{
"assignments":
[
10
],
"declarations":
[
{
"constant": false,
"id": 10,
"mutability": "mutable",
"name": "i",
"nameLocation": "217:1:1",
"nodeType": "VariableDeclaration",
"scope": 25,
"src": "212:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 9,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "212:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 12,
"initialValue":
{
"hexValue": "30",
"id": 11,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "221:1:1",
"typeDescriptions":
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "212:10:1"
},
"loopExpression":
{
"expression":
{
"id": 17,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": true,
"src": "256:3:1",
"subExpression":
{
"id": 16,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 10,
"src": "258:1:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 18,
"nodeType": "ExpressionStatement",
"src": "256:3:1"
},
"nodeType": "ForStatement",
"src": "129:237:1"
}
]
},
"functionSelector": "26121ff0",
"id": 27,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
"id": 1,
"nodeType": "ParameterList",
"parameters": [],
"src": "27:2:1"
},
"returnParameters":
{
"id": 2,
"nodeType": "ParameterList",
"parameters": [],
"src": "42:0:1"
},
"scope": 41,
"src": "17:355:1",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
},
{
"body":
{
"id": 39,
"nodeType": "Block",
"src": "662:2:1",
"statements": []
},
"functionSelector": "191157d1",
"id": 40,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "386:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
"id": 37,
"nodeType": "ParameterList",
"parameters":
[
{
"constant": false,
"id": 30,
"mutability": "mutable",
"name": "param1",
"nameLocation": "468:6:1",
"nodeType": "VariableDeclaration",
"scope": 40,
"src": "463:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 29,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "463:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 33,
"mutability": "mutable",
"name": "param2",
"nameLocation": "555:6:1",
"nodeType": "VariableDeclaration",
"scope": 40,
"src": "550:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 32,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "550:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 36,
"mutability": "mutable",
"name": "param3",
"nameLocation": "642:6:1",
"nodeType": "VariableDeclaration",
"scope": 40,
"src": "637:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName":
{
"id": 35,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "637:4:1",
"typeDescriptions":
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "387:267:1"
},
"returnParameters":
{
"id": 38,
"nodeType": "ParameterList",
"parameters": [],
"src": "662:0:1"
},
"scope": 41,
"src": "377:287:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
}
],
"scope": 42,
"src": "0:666:1"
}
],
"src": "0:667:1"
}

View File

@ -0,0 +1,25 @@
contract C {
function f() public pure {
/// Documentation for x; will appear in ast json
uint x = 1;
for (
/// documentation for i; will not appear in ast json
uint i = 0;
i < 10;
++i
) {
/// documentation for j; will appear in ast json
uint j = 0;
}
}
function g(
/// documentation for param1; will not appear in ast json
uint param1,
/// documentation for param2; will not appear in ast json
uint param2,
/// documentation for param3; will not appear in ast json
uint param3
) public {}
}
// ----

View File

@ -0,0 +1,356 @@
{
"absolutePath": "a",
"id": 42,
"nodeType": "SourceUnit",
"nodes":
[
{
"abstract": false,
"baseContracts": [],
"contractDependencies": [],
"contractKind": "contract",
"id": 41,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
{
"body":
{
"id": 26,
"nodeType": "Block",
"src": "42:330:1",
"statements":
[
{
"assignments":
[
5
],
"declarations":
[
{
"constant": false,
"id": 5,
"mutability": "mutable",
"name": "x",
"nameLocation": "114:1:1",
"nodeType": "VariableDeclaration",
"src": "109:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 4,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "109:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
}
],
"documentation": "Documentation for x; will appear in ast json",
"id": 7,
"initialValue":
{
"hexValue": "31",
"id": 6,
"kind": "number",
"nodeType": "Literal",
"src": "118:1:1",
"typeDescriptions": {},
"value": "1"
},
"nodeType": "VariableDeclarationStatement",
"src": "109:10:1"
},
{
"body":
{
"id": 24,
"nodeType": "Block",
"src": "270:96:1",
"statements":
[
{
"assignments":
[
21
],
"declarations":
[
{
"constant": false,
"id": 21,
"mutability": "mutable",
"name": "j",
"nameLocation": "350:1:1",
"nodeType": "VariableDeclaration",
"src": "345:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 20,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "345:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
}
],
"documentation": "documentation for j; will appear in ast json",
"id": 23,
"initialValue":
{
"hexValue": "30",
"id": 22,
"kind": "number",
"nodeType": "Literal",
"src": "354:1:1",
"typeDescriptions": {},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "345:10:1"
}
]
},
"condition":
{
"commonType": {},
"id": 15,
"leftExpression":
{
"id": 13,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"src": "236:1:1",
"typeDescriptions": {}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression":
{
"hexValue": "3130",
"id": 14,
"kind": "number",
"nodeType": "Literal",
"src": "240:2:1",
"typeDescriptions": {},
"value": "10"
},
"src": "236:6:1",
"typeDescriptions": {}
},
"id": 25,
"initializationExpression":
{
"assignments":
[
10
],
"declarations":
[
{
"constant": false,
"id": 10,
"mutability": "mutable",
"name": "i",
"nameLocation": "217:1:1",
"nodeType": "VariableDeclaration",
"src": "212:6:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 9,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "212:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
}
],
"id": 12,
"initialValue":
{
"hexValue": "30",
"id": 11,
"kind": "number",
"nodeType": "Literal",
"src": "221:1:1",
"typeDescriptions": {},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "212:10:1"
},
"loopExpression":
{
"expression":
{
"id": 17,
"nodeType": "UnaryOperation",
"operator": "++",
"prefix": true,
"src": "256:3:1",
"subExpression":
{
"id": 16,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"src": "258:1:1",
"typeDescriptions": {}
},
"typeDescriptions": {}
},
"id": 18,
"nodeType": "ExpressionStatement",
"src": "256:3:1"
},
"nodeType": "ForStatement",
"src": "129:237:1"
}
]
},
"id": 27,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
"id": 1,
"nodeType": "ParameterList",
"parameters": [],
"src": "27:2:1"
},
"returnParameters":
{
"id": 2,
"nodeType": "ParameterList",
"parameters": [],
"src": "42:0:1"
},
"src": "17:355:1",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
},
{
"body":
{
"id": 39,
"nodeType": "Block",
"src": "662:2:1",
"statements": []
},
"id": 40,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "386:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
"id": 37,
"nodeType": "ParameterList",
"parameters":
[
{
"constant": false,
"id": 30,
"mutability": "mutable",
"name": "param1",
"nameLocation": "468:6:1",
"nodeType": "VariableDeclaration",
"src": "463:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 29,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "463:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
},
{
"constant": false,
"id": 33,
"mutability": "mutable",
"name": "param2",
"nameLocation": "555:6:1",
"nodeType": "VariableDeclaration",
"src": "550:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 32,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "550:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
},
{
"constant": false,
"id": 36,
"mutability": "mutable",
"name": "param3",
"nameLocation": "642:6:1",
"nodeType": "VariableDeclaration",
"src": "637:11:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {},
"typeName":
{
"id": 35,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "637:4:1",
"typeDescriptions": {}
},
"visibility": "internal"
}
],
"src": "387:267:1"
},
"returnParameters":
{
"id": 38,
"nodeType": "ParameterList",
"parameters": [],
"src": "662:0:1"
},
"src": "377:287:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
}
],
"src": "0:666:1"
}
],
"src": "0:667:1"
}

View File

@ -4,4 +4,3 @@ contract C {
uint private state;
}
// ----
// DocstringParsingError 6546: (17-74): Documentation tag @notice not valid for non-public state variables.

View File

@ -11,4 +11,3 @@ contract C {
}
}
// ----
// ParserError 2837: (290-295): Only state variables or file-level variables can have a docstring.