aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libsolidity/Exceptions.cpp4
-rw-r--r--libsolidity/Exceptions.h2
-rw-r--r--libsolidity/NameAndTypeResolver.cpp12
-rw-r--r--libsolidity/Parser.cpp4
-rw-r--r--libsolidity/TypeChecker.cpp4
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp172
-rw-r--r--test/libsolidity/SolidityParser.cpp2
7 files changed, 105 insertions, 95 deletions
diff --git a/libsolidity/Exceptions.cpp b/libsolidity/Exceptions.cpp
index 37d25697..96bb2e37 100644
--- a/libsolidity/Exceptions.cpp
+++ b/libsolidity/Exceptions.cpp
@@ -15,7 +15,7 @@
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/**
- * @author Christian <c@ethdev.com>
+ * @author Liana <liana@ethdev.com>
* @date 2015
* Solidity exception hierarchy.
*/
@@ -26,7 +26,7 @@
using namespace dev;
using namespace dev::solidity;
-Error::Error(Error::Type _type): m_type(_type)
+Error::Error(Type _type): m_type(_type)
{
switch(m_type)
{
diff --git a/libsolidity/Exceptions.h b/libsolidity/Exceptions.h
index 9bc22994..59d69a27 100644
--- a/libsolidity/Exceptions.h
+++ b/libsolidity/Exceptions.h
@@ -36,7 +36,7 @@ using ErrorList = std::vector<std::shared_ptr<Error const>>;
struct CompilerError: virtual Exception {};
struct InternalCompilerError: virtual Exception {};
-struct fatalError: virtual Exception {}; //todo rename to FatalError
+struct FatalError: virtual Exception {};
class Error: virtual public Exception
{
diff --git a/libsolidity/NameAndTypeResolver.cpp b/libsolidity/NameAndTypeResolver.cpp
index 934be0e3..dc82531f 100644
--- a/libsolidity/NameAndTypeResolver.cpp
+++ b/libsolidity/NameAndTypeResolver.cpp
@@ -49,7 +49,7 @@ bool NameAndTypeResolver::registerDeclarations(SourceUnit& _sourceUnit)
{
DeclarationRegistrationHelper registrar(m_scopes, _sourceUnit, m_errors);
}
- catch (fatalError)
+ catch (FatalError)
{
return false;
}
@@ -122,7 +122,7 @@ bool NameAndTypeResolver::resolveNamesAndTypes(ContractDefinition& _contract)
);
}
}
- catch (fatalError const& _e)
+ catch (FatalError const& _e)
{
return false;
}
@@ -136,7 +136,7 @@ bool NameAndTypeResolver::updateDeclaration(Declaration const& _declaration)
m_scopes[nullptr].registerDeclaration(_declaration, false, true);
solAssert(_declaration.scope() == nullptr, "Updated declaration outside global scope.");
}
- catch(fatalError _error)
+ catch(FatalError _error)
{
return false;
}
@@ -317,7 +317,7 @@ void NameAndTypeResolver::reportFatalDeclarationError(
)
{
reportDeclarationError(_sourceLoction, _description);
- BOOST_THROW_EXCEPTION(fatalError());
+ BOOST_THROW_EXCEPTION(FatalError());
}
void NameAndTypeResolver::reportTypeError(Error _e)
@@ -328,7 +328,7 @@ void NameAndTypeResolver::reportTypeError(Error _e)
void NameAndTypeResolver::reportFatalTypeError(Error _e)
{
reportTypeError(_e);
- BOOST_THROW_EXCEPTION(fatalError());
+ BOOST_THROW_EXCEPTION(FatalError());
}
@@ -527,7 +527,7 @@ void DeclarationRegistrationHelper::fatalDeclarationError(
)
{
declarationError(_sourceLoction, _description);
- BOOST_THROW_EXCEPTION(fatalError());
+ BOOST_THROW_EXCEPTION(FatalError());
}
}
diff --git a/libsolidity/Parser.cpp b/libsolidity/Parser.cpp
index 491af369..58632b85 100644
--- a/libsolidity/Parser.cpp
+++ b/libsolidity/Parser.cpp
@@ -87,7 +87,7 @@ ASTPointer<SourceUnit> Parser::parse(shared_ptr<Scanner> const& _scanner)
}
return nodeFactory.createNode<SourceUnit>(nodes);
}
- catch(fatalError const& _error)
+ catch(FatalError const& _error)
{
return nullptr;
}
@@ -1179,7 +1179,7 @@ void Parser::parserError(string const& _description)
void Parser::fatalParserError(string const& _description)
{
parserError(_description);
- BOOST_THROW_EXCEPTION(fatalError());
+ BOOST_THROW_EXCEPTION(FatalError());
}
}
diff --git a/libsolidity/TypeChecker.cpp b/libsolidity/TypeChecker.cpp
index 2e45f7b0..9ceb8203 100644
--- a/libsolidity/TypeChecker.cpp
+++ b/libsolidity/TypeChecker.cpp
@@ -36,7 +36,7 @@ bool TypeChecker::checkTypeRequirements(const ContractDefinition& _contract)
{
visit(_contract);
}
- catch (fatalError const&)
+ catch (FatalError const&)
{
// We got a fatal error which required to stop further type checking, but we can
// continue normally from here.
@@ -1268,5 +1268,5 @@ void TypeChecker::typeError(ASTNode const& _node, string const& _description)
void TypeChecker::fatalTypeError(ASTNode const& _node, string const& _description)
{
typeError(_node, _description);
- BOOST_THROW_EXCEPTION(fatalError());
+ BOOST_THROW_EXCEPTION(FatalError());
}
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 24f19143..909ec303 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -101,13 +101,23 @@ parseAnalyseAndReturnError(string const& _source, bool _reportWarnings = false)
return make_pair(sourceUnit, nullptr);
}
-ASTPointer<SourceUnit> parseAndAnalyse(string const& _source)
+ASTPointer<SourceUnit> createSourceUnit(string const& _source)
{
auto sourceAndError = parseAnalyseAndReturnError(_source);
BOOST_REQUIRE(!!sourceAndError.first);
+ BOOST_REQUIRE(!sourceAndError.second);
return sourceAndError.first;
}
+bool successResolving(std::string const& _source)
+{
+ auto sourceAndError = parseAnalyseAndReturnError(_source);
+
+ if (sourceAndError.second && *sourceAndError.second == Error::Type::TypeError)
+ return false;
+ return true;
+}
+
Error::Type parseAndAnalyseReturnErrorType(std::string const& _source, bool _warning = false)
{
auto sourceAndError = parseAnalyseAndReturnError(_source, _warning);
@@ -146,7 +156,7 @@ BOOST_AUTO_TEST_CASE(smoke_test)
" uint256 stateVariable1;\n"
" function fun(uint256 arg1) { uint256 y; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(double_stateVariable_declaration)
@@ -181,7 +191,7 @@ BOOST_AUTO_TEST_CASE(name_shadowing)
" uint256 variable;\n"
" function f() { uint32 variable ; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(name_references)
@@ -190,7 +200,7 @@ BOOST_AUTO_TEST_CASE(name_references)
" uint256 variable;\n"
" function f(uint256 arg) returns (uint out) { f(variable); test; out; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(undeclared_name)
@@ -208,7 +218,7 @@ BOOST_AUTO_TEST_CASE(reference_to_later_declaration)
" function g() { f(); }"
" function f() { }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(struct_definition_directly_recursive)
@@ -245,7 +255,7 @@ BOOST_AUTO_TEST_CASE(struct_definition_not_really_recursive)
struct s2 { s1 x; s1 y; }
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(struct_definition_recursion_via_mapping)
@@ -257,7 +267,7 @@ BOOST_AUTO_TEST_CASE(struct_definition_recursion_via_mapping)
" mapping(uint => MyStructName1) x;\n"
" }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(type_inference_smoke_test)
@@ -265,7 +275,7 @@ BOOST_AUTO_TEST_CASE(type_inference_smoke_test)
char const* text = "contract test {\n"
" function f(uint256 arg1, uint32 arg2) returns (bool ret) { var x = arg1 + arg2 == 8; ret = x; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(type_checking_return)
@@ -273,7 +283,7 @@ BOOST_AUTO_TEST_CASE(type_checking_return)
char const* text = "contract test {\n"
" function f() returns (bool r) { return 1 >= 2; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(type_checking_return_wrong_number)
@@ -298,7 +308,7 @@ BOOST_AUTO_TEST_CASE(type_checking_function_call)
" function f() returns (bool r) { return g(12, true) == 3; }\n"
" function g(uint256 a, bool b) returns (uint256 r) { }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(type_conversion_for_comparison)
@@ -306,7 +316,7 @@ BOOST_AUTO_TEST_CASE(type_conversion_for_comparison)
char const* text = "contract test {\n"
" function f() { uint32(2) == int64(2); }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(type_conversion_for_comparison_invalid)
@@ -322,7 +332,7 @@ BOOST_AUTO_TEST_CASE(type_inference_explicit_conversion)
char const* text = "contract test {\n"
" function f() returns (int256 r) { var x = int256(uint32(2)); return x; }"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(large_string_literal)
@@ -330,7 +340,7 @@ BOOST_AUTO_TEST_CASE(large_string_literal)
char const* text = "contract test {\n"
" function f() { var x = \"123456789012345678901234567890123\"; }"
"}\n";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(balance)
@@ -340,7 +350,7 @@ BOOST_AUTO_TEST_CASE(balance)
" uint256 x = address(0).balance;\n"
" }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(balance_invalid)
@@ -380,7 +390,7 @@ BOOST_AUTO_TEST_CASE(assignment_to_struct)
" data = a;\n"
" }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(returns_in_constructor)
@@ -404,7 +414,7 @@ BOOST_AUTO_TEST_CASE(forward_function_reference)
" if (First(2).fun() == true) return 1;\n"
" }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(comparison_bitop_precedence)
@@ -414,7 +424,7 @@ BOOST_AUTO_TEST_CASE(comparison_bitop_precedence)
" return 1 & 2 == 8 & 9 && 1 ^ 2 < 4 | 6;\n"
" }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(function_no_implementation)
@@ -423,7 +433,7 @@ BOOST_AUTO_TEST_CASE(function_no_implementation)
char const* text = "contract test {\n"
" function functionName(bytes32 input) returns (bytes32 out);\n"
"}\n";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
ContractDefinition* contract = dynamic_cast<ContractDefinition*>(nodes[0].get());
BOOST_CHECK(contract);
@@ -438,7 +448,7 @@ BOOST_AUTO_TEST_CASE(abstract_contract)
contract base { function foo(); }
contract derived is base { function foo() {} }
)";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
ContractDefinition* base = dynamic_cast<ContractDefinition*>(nodes[0].get());
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[1].get());
@@ -457,7 +467,7 @@ BOOST_AUTO_TEST_CASE(abstract_contract_with_overload)
contract base { function foo(bool); }
contract derived is base { function foo(uint) {} }
)";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
ContractDefinition* base = dynamic_cast<ContractDefinition*>(nodes[0].get());
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[1].get());
@@ -491,7 +501,7 @@ BOOST_AUTO_TEST_CASE(abstract_contract_constructor_args_optional)
function foo() {}
}
)";
- ETH_TEST_REQUIRE_NO_THROW(parseAndAnalyse(text), "Parsing and name resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(createSourceUnit(text), "Parsing and name resolving failed");
}
BOOST_AUTO_TEST_CASE(abstract_contract_constructor_args_not_provided)
@@ -505,7 +515,7 @@ BOOST_AUTO_TEST_CASE(abstract_contract_constructor_args_not_provided)
function foo() {}
}
)";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name resolving failed");
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->nodes();
BOOST_CHECK_EQUAL(nodes.size(), 3);
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[2].get());
@@ -532,7 +542,7 @@ BOOST_AUTO_TEST_CASE(function_canonical_signature)
" ret = arg1 + arg2;\n"
" }\n"
"}\n";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{
@@ -549,7 +559,7 @@ BOOST_AUTO_TEST_CASE(function_canonical_signature_type_aliases)
" ret = 5;\n"
" }\n"
"}\n";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{
@@ -572,7 +582,7 @@ BOOST_AUTO_TEST_CASE(function_external_types)
ret = 5;
}
})";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{
@@ -594,7 +604,7 @@ BOOST_AUTO_TEST_CASE(enum_external_type)
ret = 5;
}
})";
- ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseAndAnalyse(text), "Parsing and name Resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(sourceUnit = createSourceUnit(text), "Parsing and name Resolving failed");
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{
@@ -616,7 +626,7 @@ BOOST_AUTO_TEST_CASE(function_external_call_allowed_conversion)
}
function g (C c) external {}
})";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(function_external_call_not_allowed_conversion)
@@ -646,7 +656,7 @@ BOOST_AUTO_TEST_CASE(function_internal_allowed_conversion)
g(a);
}
})";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(function_internal_not_allowed_conversion)
@@ -685,7 +695,7 @@ BOOST_AUTO_TEST_CASE(inheritance_basic)
function f() { baseMember = 7; }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(inheritance_diamond_basic)
@@ -698,7 +708,7 @@ BOOST_AUTO_TEST_CASE(inheritance_diamond_basic)
function g() { f(); rootFunction(); }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(cyclic_inheritance)
@@ -716,7 +726,7 @@ BOOST_AUTO_TEST_CASE(legal_override_direct)
contract B { function f() {} }
contract C is B { function f(uint i) {} }
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(legal_override_indirect)
@@ -726,7 +736,7 @@ BOOST_AUTO_TEST_CASE(legal_override_indirect)
contract B { function f() {} }
contract C is A, B { }
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(illegal_override_visibility)
@@ -754,7 +764,7 @@ BOOST_AUTO_TEST_CASE(complex_inheritance)
contract B { function f() {} function g() returns (uint8 r) {} }
contract C is A, B { }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(constructor_visibility)
@@ -764,7 +774,7 @@ BOOST_AUTO_TEST_CASE(constructor_visibility)
contract A { function A() { } }
contract B is A { function f() { A x = A(0); } }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(overriding_constructor)
@@ -774,7 +784,7 @@ BOOST_AUTO_TEST_CASE(overriding_constructor)
contract A { function A() { } }
contract B is A { function A() returns (uint8 r) {} }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(missing_base_constructor_arguments)
@@ -783,7 +793,7 @@ BOOST_AUTO_TEST_CASE(missing_base_constructor_arguments)
contract A { function A(uint a) { } }
contract B is A { }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
@@ -792,7 +802,7 @@ BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
contract A { function A(uint a) { } }
contract B is A { }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(implicit_derived_to_base_conversion)
@@ -803,7 +813,7 @@ BOOST_AUTO_TEST_CASE(implicit_derived_to_base_conversion)
function f() { A a = B(1); }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(implicit_base_to_derived_conversion)
@@ -826,7 +836,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_invocation)
modifier mod2(bytes7 a) { while (a == "1234567") _ }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(invalid_function_modifier_type)
@@ -849,7 +859,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_invocation_parameters)
modifier mod2(bytes7 a) { while (a == "1234567") _ }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(function_modifier_invocation_local_variables)
@@ -860,7 +870,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_invocation_local_variables)
modifier mod(uint a) { if (a > 0) _ }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(legal_modifier_override)
@@ -869,7 +879,7 @@ BOOST_AUTO_TEST_CASE(legal_modifier_override)
contract A { modifier mod(uint a) {} }
contract B is A { modifier mod(uint a) {} }
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(illegal_modifier_override)
@@ -923,7 +933,7 @@ BOOST_AUTO_TEST_CASE(state_variable_accessors)
ASTPointer<SourceUnit> source;
ContractDefinition const* contract;
- ETH_TEST_CHECK_NO_THROW(source = parseAndAnalyse(text), "Parsing and Resolving names failed");
+ ETH_TEST_CHECK_NO_THROW(source = createSourceUnit(text), "Parsing and Resolving names failed");
BOOST_REQUIRE((contract = retrieveContract(source, 0)) != nullptr);
FunctionTypePointer function = retrieveFunctionBySignature(contract, "foo()");
BOOST_REQUIRE(function && function->hasDeclaration());
@@ -973,7 +983,7 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
ASTPointer<SourceUnit> source;
ContractDefinition const* contract;
- ETH_TEST_CHECK_NO_THROW(source = parseAndAnalyse(text), "Parsing and Resolving names failed");
+ ETH_TEST_CHECK_NO_THROW(source = createSourceUnit(text), "Parsing and Resolving names failed");
BOOST_CHECK((contract = retrieveContract(source, 0)) != nullptr);
FunctionTypePointer function;
function = retrieveFunctionBySignature(contract, "foo()");
@@ -991,7 +1001,7 @@ BOOST_AUTO_TEST_CASE(base_class_state_variable_accessor)
"contract Child is Parent{\n"
" function foo() returns (uint256) { return Parent.m_aMember; }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(base_class_state_variable_internal_member)
@@ -1002,7 +1012,7 @@ BOOST_AUTO_TEST_CASE(base_class_state_variable_internal_member)
"contract Child is Parent{\n"
" function foo() returns (uint256) { return Parent.m_aMember; }\n"
"}\n";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(state_variable_member_of_wrong_class1)
@@ -1042,7 +1052,7 @@ BOOST_AUTO_TEST_CASE(fallback_function)
function() { x = 2; }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(fallback_function_with_arguments)
@@ -1079,7 +1089,7 @@ BOOST_AUTO_TEST_CASE(fallback_function_inheritance)
function() { x = 2; }
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(event)
@@ -1089,7 +1099,7 @@ BOOST_AUTO_TEST_CASE(event)
event e(uint indexed a, bytes3 indexed s, bool indexed b);
function f() { e(2, "abc", true); }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(event_too_many_indexed)
@@ -1107,7 +1117,7 @@ BOOST_AUTO_TEST_CASE(anonymous_event_four_indexed)
contract c {
event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d) anonymous;
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(anonymous_event_too_many_indexed)
@@ -1126,7 +1136,7 @@ BOOST_AUTO_TEST_CASE(event_call)
event e(uint a, bytes3 indexed s, bool indexed b);
function f() { e(2, "abc", true); }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(event_inheritance)
@@ -1138,7 +1148,7 @@ BOOST_AUTO_TEST_CASE(event_inheritance)
contract c is base {
function f() { e(2, "abc", true); }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(multiple_events_argument_clash)
@@ -1148,7 +1158,7 @@ BOOST_AUTO_TEST_CASE(multiple_events_argument_clash)
event e1(uint a, uint e1, uint e2);
event e2(uint a, uint e1, uint e2);
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(access_to_default_function_visibility)
@@ -1160,7 +1170,7 @@ BOOST_AUTO_TEST_CASE(access_to_default_function_visibility)
contract d {
function g() { c(0).f(); }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(access_to_internal_function)
@@ -1196,7 +1206,7 @@ BOOST_AUTO_TEST_CASE(access_to_internal_state_variable)
contract d {
function g() { c(0).a(); }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(error_count_in_named_args)
@@ -1242,7 +1252,7 @@ BOOST_AUTO_TEST_CASE(empty_name_input_parameter)
function f(uint){
}
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(empty_name_return_parameter)
@@ -1252,7 +1262,7 @@ BOOST_AUTO_TEST_CASE(empty_name_return_parameter)
function f() returns(bool){
}
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(empty_name_input_parameter_with_named_one)
@@ -1263,7 +1273,7 @@ BOOST_AUTO_TEST_CASE(empty_name_input_parameter_with_named_one)
return k;
}
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(empty_name_return_parameter_with_named_one)
@@ -1293,7 +1303,7 @@ BOOST_AUTO_TEST_CASE(overflow_caused_by_ether_units)
}
uint256 a;
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(sourceCodeFine),
+ ETH_TEST_CHECK_NO_THROW(createSourceUnit(sourceCodeFine),
"Parsing and Resolving names failed");
char const* sourceCode = R"(
contract c {
@@ -1336,7 +1346,7 @@ BOOST_AUTO_TEST_CASE(enum_member_access)
ActionChoices choices;
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(enum_invalid_member_access)
@@ -1368,7 +1378,7 @@ BOOST_AUTO_TEST_CASE(enum_explicit_conversion_is_okay)
uint64 b;
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(int_to_enum_explicit_conversion_is_okay)
@@ -1385,7 +1395,7 @@ BOOST_AUTO_TEST_CASE(int_to_enum_explicit_conversion_is_okay)
ActionChoices b;
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(enum_implicit_conversion_is_not_okay)
@@ -1505,7 +1515,7 @@ BOOST_AUTO_TEST_CASE(test_for_bug_override_function_with_bytearray_type)
function f(bytes _a) external returns (uint256 r) {r = 42;}
}
)";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(sourceCode), "Parsing and Name Resolving failed");
+ ETH_TEST_CHECK_NO_THROW(createSourceUnit(sourceCode), "Parsing and Name Resolving failed");
}
BOOST_AUTO_TEST_CASE(array_with_nonconstant_length)
@@ -1547,7 +1557,7 @@ BOOST_AUTO_TEST_CASE(array_copy_with_different_types_conversion_possible)
uint8[] b;
function f() { a = b; }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(array_copy_with_different_types_static_dynamic)
@@ -1558,7 +1568,7 @@ BOOST_AUTO_TEST_CASE(array_copy_with_different_types_static_dynamic)
uint8[80] b;
function f() { a = b; }
})";
- ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(array_copy_with_different_types_dynamic_static)
@@ -1702,7 +1712,7 @@ BOOST_AUTO_TEST_CASE(test_byte_is_alias_of_byte1)
bytes arr;
function f() { byte a = arr[0];}
})";
- ETH_TEST_REQUIRE_NO_THROW(parseAndAnalyse(text), "Type resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(createSourceUnit(text), "Type resolving failed");
}
BOOST_AUTO_TEST_CASE(assigning_value_to_const_variable)
@@ -1767,7 +1777,7 @@ BOOST_AUTO_TEST_CASE(assignment_of_nonoverloaded_function)
function g() returns(uint) { var x = f; return x(7); }
}
)";
- ETH_TEST_REQUIRE_NO_THROW(parseAndAnalyse(sourceCode), "Type resolving failed");
+ ETH_TEST_REQUIRE_NO_THROW(createSourceUnit(sourceCode), "Type resolving failed");
}
BOOST_AUTO_TEST_CASE(assignment_of_overloaded_function)
@@ -1849,7 +1859,7 @@ BOOST_AUTO_TEST_CASE(string)
function f(string x) external { s = x; }
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(string_index)
@@ -1891,7 +1901,7 @@ BOOST_AUTO_TEST_CASE(negative_integers_to_signed_min)
int8 public i = -128;
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(positive_integers_to_signed_out_of_bound)
@@ -1911,7 +1921,7 @@ BOOST_AUTO_TEST_CASE(positive_integers_to_signed_out_of_bound_max)
int8 public j = 127;
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(negative_integers_to_unsigned)
@@ -1993,7 +2003,7 @@ BOOST_AUTO_TEST_CASE(storage_location_local_variables)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(no_mappings_in_memory_array)
@@ -2063,7 +2073,7 @@ BOOST_AUTO_TEST_CASE(assignment_mem_storage_variable_directly)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(function_argument_mem_to_storage)
@@ -2091,7 +2101,7 @@ BOOST_AUTO_TEST_CASE(function_argument_storage_to_mem)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(mem_array_assignment_changes_base_type)
@@ -2145,7 +2155,7 @@ BOOST_AUTO_TEST_CASE(struct_constructor)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(struct_constructor_nested)
@@ -2160,7 +2170,7 @@ BOOST_AUTO_TEST_CASE(struct_constructor_nested)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(struct_named_constructor)
@@ -2173,7 +2183,7 @@ BOOST_AUTO_TEST_CASE(struct_named_constructor)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
+ BOOST_CHECK_NO_THROW(createSourceUnit(sourceCode));
}
BOOST_AUTO_TEST_CASE(literal_strings)
@@ -2186,7 +2196,7 @@ BOOST_AUTO_TEST_CASE(literal_strings)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(invalid_integer_literal_fraction)
@@ -2242,7 +2252,7 @@ BOOST_AUTO_TEST_CASE(string_bytes_conversion)
function m() internal { string(b); }
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(inheriting_from_library)
@@ -2276,7 +2286,7 @@ BOOST_AUTO_TEST_CASE(valid_library)
char const* text = R"(
library Lib { uint constant x = 9; }
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(call_to_library_function)
@@ -2292,7 +2302,7 @@ BOOST_AUTO_TEST_CASE(call_to_library_function)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(creating_contract_within_the_contract)
@@ -2404,7 +2414,7 @@ BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fine)
}
}
)";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(text));
+ BOOST_CHECK(successResolving(text));
}
BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_1)
diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp
index 3147c034..2482acff 100644
--- a/test/libsolidity/SolidityParser.cpp
+++ b/test/libsolidity/SolidityParser.cpp
@@ -60,7 +60,7 @@ bool successParse(std::string const& _source)
if(!sourceUnit)
return false;
}
- catch (fatalError const& _exception)
+ catch (FatalError const& _exception)
{
if (Error::containsErrorOfType(errors, Error::Type::ParserError))
return false;