fixed test framework

This commit is contained in:
LianaHus 2015-11-06 18:43:17 +01:00
parent 7eb162c0df
commit 63060fc1f0
3 changed files with 29 additions and 28 deletions

View File

@ -84,9 +84,6 @@ bool NameAndTypeResolver::resolveNamesAndTypes(ContractDefinition& _contract)
importInheritedScope(*base); importInheritedScope(*base);
} }
if (!success)
return false;
for (ASTPointer<StructDefinition> const& structDef: _contract.definedStructs()) for (ASTPointer<StructDefinition> const& structDef: _contract.definedStructs())
if (!resolver.resolve(*structDef)) if (!resolver.resolve(*structDef))
success = false; success = false;
@ -100,8 +97,6 @@ bool NameAndTypeResolver::resolveNamesAndTypes(ContractDefinition& _contract)
if (!resolver.resolve(*event)) if (!resolver.resolve(*event))
success = false; success = false;
// these can contain code, only resolve parameters for now // these can contain code, only resolve parameters for now
if (!success)
return false;
for (ASTPointer<ModifierDefinition> const& modifier: _contract.functionModifiers()) for (ASTPointer<ModifierDefinition> const& modifier: _contract.functionModifiers())
{ {
m_currentScope = &m_scopes[modifier.get()]; m_currentScope = &m_scopes[modifier.get()];
@ -110,8 +105,6 @@ bool NameAndTypeResolver::resolveNamesAndTypes(ContractDefinition& _contract)
success = false; success = false;
} }
if (!success)
return false;
for (ASTPointer<FunctionDefinition> const& function: _contract.definedFunctions()) for (ASTPointer<FunctionDefinition> const& function: _contract.definedFunctions())
{ {
m_currentScope = &m_scopes[function.get()]; m_currentScope = &m_scopes[function.get()];
@ -138,8 +131,6 @@ bool NameAndTypeResolver::resolveNamesAndTypes(ContractDefinition& _contract)
success = false; success = false;
} }
if (!success)
return false;
for (ASTPointer<FunctionDefinition> const& function: _contract.definedFunctions()) for (ASTPointer<FunctionDefinition> const& function: _contract.definedFunctions())
{ {
m_currentScope = &m_scopes[function.get()]; m_currentScope = &m_scopes[function.get()];

View File

@ -58,8 +58,15 @@ public:
/// @returns true if no errors during resolving /// @returns true if no errors during resolving
bool resolve(ASTNode& _root) bool resolve(ASTNode& _root)
{
try
{ {
_root.accept(*this); _root.accept(*this);
}
catch (FatalError const& e)
{
solAssert(m_errorOccurred, "");
}
return !m_errorOccurred; return !m_errorOccurred;
} }

View File

@ -62,14 +62,17 @@ parseAnalyseAndReturnError(string const& _source, bool _reportWarnings = false)
solAssert(Error::containsOnlyWarnings(errors), ""); solAssert(Error::containsOnlyWarnings(errors), "");
resolver.registerDeclarations(*sourceUnit); resolver.registerDeclarations(*sourceUnit);
bool success = true;
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes()) for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get())) if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{ {
globalContext->setCurrentContract(*contract); globalContext->setCurrentContract(*contract);
resolver.updateDeclaration(*globalContext->currentThis()); resolver.updateDeclaration(*globalContext->currentThis());
resolver.updateDeclaration(*globalContext->currentSuper()); resolver.updateDeclaration(*globalContext->currentSuper());
resolver.resolveNamesAndTypes(*contract); if (! resolver.resolveNamesAndTypes(*contract))
success = false;
} }
if (success)
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes()) for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get())) if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
{ {
@ -80,6 +83,7 @@ parseAnalyseAndReturnError(string const& _source, bool _reportWarnings = false)
bool success = typeChecker.checkTypeRequirements(*contract); bool success = typeChecker.checkTypeRequirements(*contract);
BOOST_CHECK(success || !errors.empty()); BOOST_CHECK(success || !errors.empty());
}
for (auto const& currentError: errors) for (auto const& currentError: errors)
{ {
if ( if (
@ -89,7 +93,6 @@ parseAnalyseAndReturnError(string const& _source, bool _reportWarnings = false)
return make_pair(sourceUnit, std::make_shared<Error::Type const>(currentError->type())); return make_pair(sourceUnit, std::make_shared<Error::Type const>(currentError->type()));
} }
} }
}
catch(Error const& _e) catch(Error const& _e)
{ {
return make_pair(sourceUnit, std::make_shared<Error::Type const>(_e.type())); return make_pair(sourceUnit, std::make_shared<Error::Type const>(_e.type()));