From 5d6747eb32f56f6b8b818eff5635888d250d62e1 Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 17 Feb 2017 16:05:22 +0100 Subject: Refactor assembly analysis into scope filling and checking. --- libsolidity/inlineasm/AsmStack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 266136a1..8d011cf8 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -49,7 +49,7 @@ bool InlineAssemblyStack::parse(shared_ptr const& _scanner) *m_parserResult = std::move(*result); AsmAnalyzer::Scopes scopes; - return (AsmAnalyzer(scopes, m_errors))(*m_parserResult); + return (AsmAnalyzer(scopes, m_errors, false)).analyze(*m_parserResult); } string InlineAssemblyStack::toString() -- cgit v1.2.3 From e0849f2f3bbb23ebddb37cd770f46266967e789d Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 14 Mar 2017 15:41:23 +0100 Subject: Split external identifier access into resolving and code generation. --- libsolidity/inlineasm/AsmStack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 8d011cf8..09084642 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -66,7 +66,7 @@ eth::Assembly InlineAssemblyStack::assemble() bool InlineAssemblyStack::parseAndAssemble( string const& _input, eth::Assembly& _assembly, - CodeGenerator::IdentifierAccess const& _identifierAccess + ExternalIdentifierAccess const& _identifierAccess ) { ErrorList errors; -- cgit v1.2.3 From c6fa78c73e3a23661014fd03b92d74d2e7df9e81 Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 21 Mar 2017 19:38:37 +0100 Subject: Use actual type checking phase of assembler. --- libsolidity/inlineasm/AsmStack.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 09084642..146fc114 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -39,7 +39,10 @@ using namespace dev; using namespace dev::solidity; using namespace dev::solidity::assembly; -bool InlineAssemblyStack::parse(shared_ptr const& _scanner) +bool InlineAssemblyStack::parse( + shared_ptr const& _scanner, + ExternalIdentifierAccess::Resolver const& _resolver +) { m_parserResult = make_shared(); Parser parser(m_errors); @@ -49,7 +52,7 @@ bool InlineAssemblyStack::parse(shared_ptr const& _scanner) *m_parserResult = std::move(*result); AsmAnalyzer::Scopes scopes; - return (AsmAnalyzer(scopes, m_errors, false)).analyze(*m_parserResult); + return (AsmAnalyzer(scopes, m_errors, _resolver)).analyze(*m_parserResult); } string InlineAssemblyStack::toString() -- cgit v1.2.3 From dfb7d5ebd955d390142241a2abcb95995ef1ba04 Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 12 Apr 2017 18:32:25 +0200 Subject: Move analysis out of code generator. --- libsolidity/inlineasm/AsmStack.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 146fc114..1903de42 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -62,8 +62,11 @@ string InlineAssemblyStack::toString() eth::Assembly InlineAssemblyStack::assemble() { - CodeGenerator codeGen(*m_parserResult, m_errors); - return codeGen.assemble(); + AsmAnalyzer::Scopes scopes; + AsmAnalyzer analyzer(scopes, m_errors); + solAssert(analyzer.analyze(*m_parserResult), ""); + CodeGenerator codeGen(m_errors); + return codeGen.assemble(*m_parserResult, scopes); } bool InlineAssemblyStack::parseAndAssemble( @@ -78,7 +81,10 @@ bool InlineAssemblyStack::parseAndAssemble( if (!errors.empty()) return false; - CodeGenerator(*parserResult, errors).assemble(_assembly, _identifierAccess); + AsmAnalyzer::Scopes scopes; + AsmAnalyzer analyzer(scopes, m_errors); + solAssert(analyzer.analyze(*m_parserResult), ""); + CodeGenerator(errors).assemble(*parserResult, scopes, _assembly, _identifierAccess); // At this point, the assembly might be messed up, but we should throw an // internal compiler error anyway. -- cgit v1.2.3 From 0ebaf220b51cb281565db232971f63ccdc636df3 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 24 Apr 2017 18:01:04 +0200 Subject: Fix refactoring error. --- libsolidity/inlineasm/AsmStack.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 1903de42..65c929c8 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -82,8 +82,8 @@ bool InlineAssemblyStack::parseAndAssemble( return false; AsmAnalyzer::Scopes scopes; - AsmAnalyzer analyzer(scopes, m_errors); - solAssert(analyzer.analyze(*m_parserResult), ""); + AsmAnalyzer analyzer(scopes, errors); + solAssert(analyzer.analyze(*parserResult), ""); CodeGenerator(errors).assemble(*parserResult, scopes, _assembly, _identifierAccess); // At this point, the assembly might be messed up, but we should throw an -- cgit v1.2.3 From 3df7b064644d4f17572b82283c4f017e98041b17 Mon Sep 17 00:00:00 2001 From: chriseth Date: Mon, 24 Apr 2017 19:50:12 +0200 Subject: Pass internal resolver to assembly analyzer. --- libsolidity/inlineasm/AsmStack.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 65c929c8..5defae4c 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -80,9 +80,10 @@ bool InlineAssemblyStack::parseAndAssemble( auto parserResult = Parser(errors).parse(scanner); if (!errors.empty()) return false; + solAssert(parserResult, ""); AsmAnalyzer::Scopes scopes; - AsmAnalyzer analyzer(scopes, errors); + AsmAnalyzer analyzer(scopes, errors, _identifierAccess.resolve); solAssert(analyzer.analyze(*parserResult), ""); CodeGenerator(errors).assemble(*parserResult, scopes, _assembly, _identifierAccess); -- cgit v1.2.3 From f3ec2ba39e7f4b85d148a7b696ef5af499fbb6fb Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 26 Apr 2017 15:41:08 +0200 Subject: Refactor to combined scope and stack height info. --- libsolidity/inlineasm/AsmStack.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'libsolidity/inlineasm/AsmStack.cpp') diff --git a/libsolidity/inlineasm/AsmStack.cpp b/libsolidity/inlineasm/AsmStack.cpp index 5defae4c..c2a7d8ea 100644 --- a/libsolidity/inlineasm/AsmStack.cpp +++ b/libsolidity/inlineasm/AsmStack.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -51,8 +52,8 @@ bool InlineAssemblyStack::parse( return false; *m_parserResult = std::move(*result); - AsmAnalyzer::Scopes scopes; - return (AsmAnalyzer(scopes, m_errors, _resolver)).analyze(*m_parserResult); + AsmAnalysisInfo analysisInfo; + return (AsmAnalyzer(analysisInfo, m_errors, _resolver)).analyze(*m_parserResult); } string InlineAssemblyStack::toString() @@ -62,11 +63,11 @@ string InlineAssemblyStack::toString() eth::Assembly InlineAssemblyStack::assemble() { - AsmAnalyzer::Scopes scopes; - AsmAnalyzer analyzer(scopes, m_errors); + AsmAnalysisInfo analysisInfo; + AsmAnalyzer analyzer(analysisInfo, m_errors); solAssert(analyzer.analyze(*m_parserResult), ""); CodeGenerator codeGen(m_errors); - return codeGen.assemble(*m_parserResult, scopes); + return codeGen.assemble(*m_parserResult, analysisInfo); } bool InlineAssemblyStack::parseAndAssemble( @@ -82,10 +83,10 @@ bool InlineAssemblyStack::parseAndAssemble( return false; solAssert(parserResult, ""); - AsmAnalyzer::Scopes scopes; - AsmAnalyzer analyzer(scopes, errors, _identifierAccess.resolve); + AsmAnalysisInfo analysisInfo; + AsmAnalyzer analyzer(analysisInfo, errors, _identifierAccess.resolve); solAssert(analyzer.analyze(*parserResult), ""); - CodeGenerator(errors).assemble(*parserResult, scopes, _assembly, _identifierAccess); + CodeGenerator(errors).assemble(*parserResult, analysisInfo, _assembly, _identifierAccess); // At this point, the assembly might be messed up, but we should throw an // internal compiler error anyway. -- cgit v1.2.3