From 742e5b259a8c88e69f09ede7312673157cd77a1f Mon Sep 17 00:00:00 2001 From: LianaHus Date: Fri, 2 Oct 2015 14:41:40 +0200 Subject: added Error class for all kind of errors Conflicts: libsolidity/Exceptions.h --- libsolidity/CompilerStack.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libsolidity/CompilerStack.cpp') diff --git a/libsolidity/CompilerStack.cpp b/libsolidity/CompilerStack.cpp index 8c1cd8cf..519f785b 100644 --- a/libsolidity/CompilerStack.cpp +++ b/libsolidity/CompilerStack.cpp @@ -107,7 +107,7 @@ bool CompilerStack::parse() resolveImports(); m_globalContext = make_shared(); - NameAndTypeResolver resolver(m_globalContext->declarations()); + NameAndTypeResolver resolver(m_globalContext->declarations(), m_errors); for (Source const* source: m_sourceOrder) resolver.registerDeclarations(*source->ast); for (Source const* source: m_sourceOrder) @@ -345,7 +345,7 @@ void CompilerStack::resolveImports() string const& id = import->identifier(); if (!m_sources.count(id)) BOOST_THROW_EXCEPTION( - ParserError() + Error(Error::Type::ParserError) << errinfo_sourceLocation(import->location()) << errinfo_comment("Source not found.") ); -- cgit v1.2.3 From c3491e446964f366101f28e3d51ab59dd9aaa5b2 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Wed, 14 Oct 2015 20:37:41 +0200 Subject: errors instead of exceptions Conflicts: libsolidity/CompilerStack.cpp libsolidity/NameAndTypeResolver.cpp libsolidity/NameAndTypeResolver.h libsolidity/TypeChecker.cpp test/libsolidity/SolidityNameAndTypeResolution.cpp --- libsolidity/CompilerStack.cpp | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'libsolidity/CompilerStack.cpp') diff --git a/libsolidity/CompilerStack.cpp b/libsolidity/CompilerStack.cpp index 519f785b..3887999a 100644 --- a/libsolidity/CompilerStack.cpp +++ b/libsolidity/CompilerStack.cpp @@ -97,30 +97,41 @@ void CompilerStack::setSource(string const& _sourceCode) bool CompilerStack::parse() { + // todo not sure about clear. can contain warnings m_errors.clear(); for (auto& sourcePair: m_sources) { sourcePair.second.scanner->reset(); - sourcePair.second.ast = Parser().parse(sourcePair.second.scanner); + sourcePair.second.ast = Parser(m_errors).parse(sourcePair.second.scanner); // todo check for errors } + if (!Error::containsOnlyWarnings(m_errors)) + // errors while parsing. sould stop before type checking + return false; + resolveImports(); m_globalContext = make_shared(); + bool success = true; NameAndTypeResolver resolver(m_globalContext->declarations(), m_errors); for (Source const* source: m_sourceOrder) - resolver.registerDeclarations(*source->ast); + success = success && resolver.registerDeclarations(*source->ast); for (Source const* source: m_sourceOrder) for (ASTPointer const& node: source->ast->nodes()) if (ContractDefinition* contract = dynamic_cast(node.get())) { m_globalContext->setCurrentContract(*contract); - resolver.updateDeclaration(*m_globalContext->currentThis()); - resolver.updateDeclaration(*m_globalContext->currentSuper()); - resolver.resolveNamesAndTypes(*contract); + success = success && resolver.updateDeclaration(*m_globalContext->currentThis()); + success = success && resolver.updateDeclaration(*m_globalContext->currentSuper()); + success = success && resolver.resolveNamesAndTypes(*contract); m_contracts[contract->name()].contract = contract; } + if (!success) + { + m_parseSuccessful = false; + return m_parseSuccessful; + } InterfaceHandler interfaceHandler; bool typesFine = true; for (Source const* source: m_sourceOrder) @@ -137,6 +148,7 @@ bool CompilerStack::parse() } else typesFine = false; + m_contracts[contract->name()].contract = contract; m_errors += typeChecker.errors(); } @@ -253,9 +265,8 @@ string const& CompilerStack::metadata(string const& _contractName, Documentation if (!m_parseSuccessful) BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful.")); - Contract const& currentContract = contract(_contractName); - std::unique_ptr* doc; + Contract const& currentContract = contract(_contractName); // checks wheather we already have the documentation switch (_type) @@ -346,9 +357,10 @@ void CompilerStack::resolveImports() if (!m_sources.count(id)) BOOST_THROW_EXCEPTION( Error(Error::Type::ParserError) - << errinfo_sourceLocation(import->location()) - << errinfo_comment("Source not found.") + << errinfo_sourceLocation(import->location()) + << errinfo_comment("Source not found.") ); + toposort(&m_sources[id]); } sourceOrder.push_back(_source); @@ -414,10 +426,12 @@ CompilerStack::Source const& CompilerStack::source(string const& _sourceName) co auto it = m_sources.find(_sourceName); if (it == m_sources.end()) BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Given source file not found.")); + return it->second; } CompilerStack::Contract::Contract(): interfaceHandler(make_shared()) {} + } } -- cgit v1.2.3 From 7a7a7dcbb59e1126679e7e8f6eab16992fffb51c Mon Sep 17 00:00:00 2001 From: LianaHus Date: Thu, 15 Oct 2015 11:10:55 +0200 Subject: fixes error after conflict resolving --- libsolidity/CompilerStack.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'libsolidity/CompilerStack.cpp') diff --git a/libsolidity/CompilerStack.cpp b/libsolidity/CompilerStack.cpp index 3887999a..dd7f7dfc 100644 --- a/libsolidity/CompilerStack.cpp +++ b/libsolidity/CompilerStack.cpp @@ -140,7 +140,7 @@ bool CompilerStack::parse() { m_globalContext->setCurrentContract(*contract); resolver.updateDeclaration(*m_globalContext->currentThis()); - TypeChecker typeChecker; + TypeChecker typeChecker(m_errors); if (typeChecker.checkTypeRequirements(*contract)) { contract->setDevDocumentation(interfaceHandler.devDocumentation(*contract)); @@ -150,7 +150,6 @@ bool CompilerStack::parse() typesFine = false; m_contracts[contract->name()].contract = contract; - m_errors += typeChecker.errors(); } m_parseSuccessful = typesFine; return m_parseSuccessful; -- cgit v1.2.3 From cd6262998ccf3c712bb2af1981eeb943ccaf8094 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Thu, 15 Oct 2015 15:16:31 +0200 Subject: removed commit --- libsolidity/CompilerStack.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'libsolidity/CompilerStack.cpp') diff --git a/libsolidity/CompilerStack.cpp b/libsolidity/CompilerStack.cpp index dd7f7dfc..cfd01310 100644 --- a/libsolidity/CompilerStack.cpp +++ b/libsolidity/CompilerStack.cpp @@ -97,7 +97,6 @@ void CompilerStack::setSource(string const& _sourceCode) bool CompilerStack::parse() { - // todo not sure about clear. can contain warnings m_errors.clear(); for (auto& sourcePair: m_sources) -- cgit v1.2.3 From 68e126dc7d85854aa1458934122a725e99eb36e0 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Thu, 15 Oct 2015 16:08:02 +0200 Subject: style fixes mostly --- libsolidity/CompilerStack.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libsolidity/CompilerStack.cpp') diff --git a/libsolidity/CompilerStack.cpp b/libsolidity/CompilerStack.cpp index cfd01310..1165d6f6 100644 --- a/libsolidity/CompilerStack.cpp +++ b/libsolidity/CompilerStack.cpp @@ -97,7 +97,9 @@ void CompilerStack::setSource(string const& _sourceCode) bool CompilerStack::parse() { + //reset m_errors.clear(); + m_parseSuccessful = false; for (auto& sourcePair: m_sources) { @@ -114,7 +116,9 @@ bool CompilerStack::parse() bool success = true; NameAndTypeResolver resolver(m_globalContext->declarations(), m_errors); for (Source const* source: m_sourceOrder) - success = success && resolver.registerDeclarations(*source->ast); + if (!resolver.registerDeclarations(*source->ast)) + return false; + for (Source const* source: m_sourceOrder) for (ASTPointer const& node: source->ast->nodes()) if (ContractDefinition* contract = dynamic_cast(node.get())) -- cgit v1.2.3