Skip to content

Commit b766268

Browse files
committed
AnalysisFramework: Get rid of parseAndAnalyse() and success()
- There are too many badly named functions doing different things. E.g. SyntaxTest has both this and parseAndAnalyze().
1 parent 309a8de commit b766268

File tree

3 files changed

+56
-46
lines changed

3 files changed

+56
-46
lines changed

test/libsolidity/AnalysisFramework.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -173,22 +173,6 @@ bool AnalysisFramework::stageSuccessful(PipelineStage _stage) const
173173
unreachable();
174174
}
175175

176-
SourceUnit const* AnalysisFramework::parseAndAnalyse(std::string const& _source)
177-
{
178-
auto sourceAndError = parseAnalyseAndReturnError(_source);
179-
BOOST_REQUIRE(!!sourceAndError.first);
180-
std::string message;
181-
if (!sourceAndError.second.empty())
182-
message = "Unexpected error: " + formatErrors(compiler().errors());
183-
BOOST_REQUIRE_MESSAGE(sourceAndError.second.empty(), message);
184-
return sourceAndError.first;
185-
}
186-
187-
bool AnalysisFramework::success(std::string const& _source)
188-
{
189-
return parseAnalyseAndReturnError(_source).second.empty();
190-
}
191-
192176
ErrorList AnalysisFramework::expectError(std::string const& _source, bool _warning, bool _allowMultiple)
193177
{
194178
auto sourceAndErrors = parseAnalyseAndReturnError(_source, _warning, true, _allowMultiple);

test/libsolidity/AnalysisFramework.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ class AnalysisFramework
5858
);
5959
virtual ~AnalysisFramework() = default;
6060

61-
SourceUnit const* parseAndAnalyse(std::string const& _source);
62-
bool success(std::string const& _source);
6361
langutil::ErrorList expectError(std::string const& _source, bool _warning = false, bool _allowMultiple = false);
6462

6563
public:
@@ -189,16 +187,19 @@ CHECK_ERROR_OR_WARNING(text, Warning, std::vector<std::string>{(substring)}, tru
189187
CHECK_ERROR_OR_WARNING(text, Warning, substrings, true, true)
190188

191189
// [checkSuccess(text)] asserts that the compilation down to typechecking succeeds.
192-
#define CHECK_SUCCESS(text) do { BOOST_CHECK(success((text))); } while(0)
190+
#define CHECK_SUCCESS(text) do { \
191+
auto [ast, errors] = parseAnalyseAndReturnError((text)); \
192+
BOOST_CHECK(errors.empty()); \
193+
} while(0)
193194

194195
#define CHECK_SUCCESS_NO_WARNINGS(text) \
195196
do \
196197
{ \
197-
auto sourceAndError = parseAnalyseAndReturnError((text), true); \
198+
auto [ast, errors] = parseAnalyseAndReturnError((text), true); \
198199
std::string message; \
199-
if (!sourceAndError.second.empty()) \
200-
message = formatErrors(compiler().errors());\
201-
BOOST_CHECK_MESSAGE(sourceAndError.second.empty(), message); \
200+
if (!errors.empty()) \
201+
message = formatErrors(errors);\
202+
BOOST_CHECK_MESSAGE(errors.empty(), message); \
202203
} \
203204
while(0)
204205

test/libsolidity/SolidityNameAndTypeResolution.cpp

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222

2323
#include <test/libsolidity/AnalysisFramework.h>
24+
#include <test/libsolidity/util/SoltestErrors.h>
2425

2526
#include <test/Common.h>
2627

@@ -41,13 +42,15 @@ BOOST_FIXTURE_TEST_SUITE(SolidityNameAndTypeResolution, AnalysisFramework)
4142

4243
BOOST_AUTO_TEST_CASE(function_no_implementation)
4344
{
44-
SourceUnit const* sourceUnit = nullptr;
4545
char const* text = R"(
4646
abstract contract test {
4747
function functionName(bytes32 input) public virtual returns (bytes32 out);
4848
}
4949
)";
50-
sourceUnit = parseAndAnalyse(text);
50+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
51+
soltestAssert(sourceUnit);
52+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
53+
5154
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
5255
ContractDefinition* contract = dynamic_cast<ContractDefinition*>(nodes[1].get());
5356
BOOST_REQUIRE(contract);
@@ -57,12 +60,14 @@ BOOST_AUTO_TEST_CASE(function_no_implementation)
5760

5861
BOOST_AUTO_TEST_CASE(abstract_contract)
5962
{
60-
SourceUnit const* sourceUnit = nullptr;
6163
char const* text = R"(
6264
abstract contract base { function foo() public virtual; }
6365
contract derived is base { function foo() public override {} }
6466
)";
65-
sourceUnit = parseAndAnalyse(text);
67+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
68+
soltestAssert(sourceUnit);
69+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
70+
6671
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
6772
ContractDefinition* base = dynamic_cast<ContractDefinition*>(nodes[1].get());
6873
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[2].get());
@@ -76,12 +81,14 @@ BOOST_AUTO_TEST_CASE(abstract_contract)
7681

7782
BOOST_AUTO_TEST_CASE(abstract_contract_with_overload)
7883
{
79-
SourceUnit const* sourceUnit = nullptr;
8084
char const* text = R"(
8185
abstract contract base { function foo(bool) public virtual; }
8286
abstract contract derived is base { function foo(uint) public {} }
8387
)";
84-
sourceUnit = parseAndAnalyse(text);
88+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
89+
soltestAssert(sourceUnit);
90+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
91+
8592
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
8693
ContractDefinition* base = dynamic_cast<ContractDefinition*>(nodes[1].get());
8794
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[2].get());
@@ -93,12 +100,14 @@ BOOST_AUTO_TEST_CASE(abstract_contract_with_overload)
93100

94101
BOOST_AUTO_TEST_CASE(implement_abstract_via_constructor)
95102
{
96-
SourceUnit const* sourceUnit = nullptr;
97103
char const* text = R"(
98104
abstract contract base { function foo() public virtual; }
99105
abstract contract foo is base { constructor() {} }
100106
)";
101-
sourceUnit = parseAndAnalyse(text);
107+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
108+
soltestAssert(sourceUnit);
109+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
110+
102111
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
103112
BOOST_CHECK_EQUAL(nodes.size(), 3);
104113
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[2].get());
@@ -108,15 +117,17 @@ BOOST_AUTO_TEST_CASE(implement_abstract_via_constructor)
108117

109118
BOOST_AUTO_TEST_CASE(function_canonical_signature)
110119
{
111-
SourceUnit const* sourceUnit = nullptr;
112120
char const* text = R"(
113121
contract Test {
114122
function foo(uint256 arg1, uint64 arg2, bool arg3) public returns (uint256 ret) {
115123
ret = arg1 + arg2;
116124
}
117125
}
118126
)";
119-
sourceUnit = parseAndAnalyse(text);
127+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
128+
soltestAssert(sourceUnit);
129+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
130+
120131
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
121132
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
122133
{
@@ -127,15 +138,17 @@ BOOST_AUTO_TEST_CASE(function_canonical_signature)
127138

128139
BOOST_AUTO_TEST_CASE(function_canonical_signature_type_aliases)
129140
{
130-
SourceUnit const* sourceUnit = nullptr;
131141
char const* text = R"(
132142
contract Test {
133143
function boo(uint, bytes32, address) public returns (uint ret) {
134144
ret = 5;
135145
}
136146
}
137147
)";
138-
sourceUnit = parseAndAnalyse(text);
148+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
149+
soltestAssert(sourceUnit);
150+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
151+
139152
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
140153
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
141154
{
@@ -148,7 +161,6 @@ BOOST_AUTO_TEST_CASE(function_canonical_signature_type_aliases)
148161

149162
BOOST_AUTO_TEST_CASE(function_external_types)
150163
{
151-
SourceUnit const* sourceUnit = nullptr;
152164
char const* text = R"(
153165
contract C {
154166
uint a;
@@ -159,7 +171,10 @@ BOOST_AUTO_TEST_CASE(function_external_types)
159171
}
160172
}
161173
)";
162-
sourceUnit = parseAndAnalyse(text);
174+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
175+
soltestAssert(sourceUnit);
176+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
177+
163178
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
164179
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
165180
{
@@ -172,7 +187,6 @@ BOOST_AUTO_TEST_CASE(function_external_types)
172187

173188
BOOST_AUTO_TEST_CASE(enum_external_type)
174189
{
175-
SourceUnit const* sourceUnit = nullptr;
176190
char const* text = R"(
177191
// test for bug #1801
178192
contract Test {
@@ -182,7 +196,10 @@ BOOST_AUTO_TEST_CASE(enum_external_type)
182196
}
183197
}
184198
)";
185-
sourceUnit = parseAndAnalyse(text);
199+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
200+
soltestAssert(sourceUnit);
201+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
202+
186203
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
187204
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
188205
{
@@ -264,7 +281,10 @@ BOOST_AUTO_TEST_CASE(struct_with_mapping_in_library)
264281
function f(X storage x) external {}
265282
}
266283
)";
267-
SourceUnit const* sourceUnit = parseAndAnalyse(text);
284+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
285+
soltestAssert(sourceUnit);
286+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
287+
268288
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
269289
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
270290
{
@@ -287,10 +307,12 @@ BOOST_AUTO_TEST_CASE(state_variable_accessors)
287307
}
288308
)";
289309

290-
SourceUnit const* source;
310+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
311+
soltestAssert(sourceUnit);
312+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
313+
291314
ContractDefinition const* contract;
292-
source = parseAndAnalyse(text);
293-
BOOST_REQUIRE((contract = retrieveContractByName(*source, "test")) != nullptr);
315+
BOOST_REQUIRE((contract = retrieveContractByName(*sourceUnit, "test")) != nullptr);
294316
FunctionTypePointer function = retrieveFunctionBySignature(*contract, "foo()");
295317
BOOST_REQUIRE(function && function->hasDeclaration());
296318
auto returnParams = function->returnParameterTypes();
@@ -327,9 +349,12 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
327349
}
328350
)";
329351

352+
auto [sourceUnit, errors] = parseAnalyseAndReturnError(text);
353+
soltestAssert(sourceUnit);
354+
soltestAssert(errors.empty(), "Unexpected error: " + formatErrors(errors));
355+
330356
ContractDefinition const* contract;
331-
SourceUnit const* source = parseAndAnalyse(text);
332-
BOOST_CHECK((contract = retrieveContractByName(*source, "test")) != nullptr);
357+
BOOST_CHECK((contract = retrieveContractByName(*sourceUnit, "test")) != nullptr);
333358
FunctionTypePointer function;
334359
function = retrieveFunctionBySignature(*contract, "foo()");
335360
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of a private variable should not exist");
@@ -345,7 +370,7 @@ BOOST_AUTO_TEST_CASE(string)
345370
function f(string calldata x) external { s = x; }
346371
}
347372
)";
348-
BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
373+
CHECK_SUCCESS(sourceCode);
349374
}
350375

351376
BOOST_AUTO_TEST_CASE(dynamic_return_types_not_possible)

0 commit comments

Comments
 (0)