From dda497ca027f5dcd47c6e2b8d624b327c4478adc Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 25 May 2017 00:19:11 +0100 Subject: Move constructor to AsmAnalyzer header --- libsolidity/inlineasm/AsmAnalysis.cpp | 9 --------- 1 file changed, 9 deletions(-) (limited to 'libsolidity/inlineasm/AsmAnalysis.cpp') diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index 60caaa1d..742d2c1a 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -38,15 +38,6 @@ using namespace dev; using namespace dev::solidity; using namespace dev::solidity::assembly; -AsmAnalyzer::AsmAnalyzer( - AsmAnalysisInfo& _analysisInfo, - ErrorList& _errors, - julia::ExternalIdentifierAccess::Resolver const& _resolver -): - m_resolver(_resolver), m_info(_analysisInfo), m_errors(_errors) -{ -} - bool AsmAnalyzer::analyze(Block const& _block) { if (!(ScopeFiller(m_info.scopes, m_errors))(_block)) -- cgit v1.2.3 From 3b75c5b45fdb1bfb49b4e157e031154c57b475f3 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 25 May 2017 00:27:48 +0100 Subject: Validate that only basic types are used in Julia --- libsolidity/inlineasm/AsmAnalysis.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libsolidity/inlineasm/AsmAnalysis.cpp') diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index 742d2c1a..ca50fdbe 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -62,6 +62,7 @@ bool AsmAnalyzer::operator()(assembly::Instruction const& _instruction) bool AsmAnalyzer::operator()(assembly::Literal const& _literal) { + expectValidType(_literal.type, _literal.location); ++m_stackHeight; if (_literal.kind == assembly::LiteralKind::String && _literal.value.size() > 32) { @@ -186,7 +187,10 @@ bool AsmAnalyzer::operator()(assembly::VariableDeclaration const& _varDecl) } for (auto const& variable: _varDecl.variables) + { + expectValidType(variable.type, variable.location); boost::get(m_currentScope->identifiers.at(variable.name)).active = true; + } m_info.stackHeightInfo[&_varDecl] = m_stackHeight; return success; } @@ -195,7 +199,10 @@ bool AsmAnalyzer::operator()(assembly::FunctionDefinition const& _funDef) { Scope& bodyScope = scope(&_funDef.body); for (auto const& var: _funDef.arguments + _funDef.returns) + { + expectValidType(var.type, var.location); boost::get(bodyScope.identifiers.at(var.name)).active = true; + } int const stackHeight = m_stackHeight; m_stackHeight = _funDef.arguments.size() + _funDef.returns.size(); @@ -444,3 +451,16 @@ Scope& AsmAnalyzer::scope(Block const* _block) solAssert(scopePtr, "Scope requested but not present."); return *scopePtr; } + +void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _location) +{ +// if (!m_julia) +// return; + + if (!(set{"bool", "u8", "s8", "u32", "s32", "u64", "s64", "u128", "s128", "u256", "s256"}).count(type)) + m_errors.push_back(make_shared( + Error::Type::TypeError, + "User defined types (\"" + type + "\") are not supported yet.", + _location + )); +} -- cgit v1.2.3 From 8fe79fe706fd64146ffbf345e0241b7c4357ce43 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 25 May 2017 01:59:57 +0100 Subject: Introduce Julia mode in AsmAnalyzer --- libsolidity/inlineasm/AsmAnalysis.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'libsolidity/inlineasm/AsmAnalysis.cpp') diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index ca50fdbe..eb6f8bc0 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -48,12 +48,14 @@ bool AsmAnalyzer::analyze(Block const& _block) bool AsmAnalyzer::operator()(Label const& _label) { + solAssert(!m_julia, ""); m_info.stackHeightInfo[&_label] = m_stackHeight; return true; } bool AsmAnalyzer::operator()(assembly::Instruction const& _instruction) { + solAssert(!m_julia, ""); auto const& info = instructionInfo(_instruction.instruction); m_stackHeight += info.ret - info.args; m_info.stackHeightInfo[&_instruction] = m_stackHeight; @@ -135,6 +137,7 @@ bool AsmAnalyzer::operator()(assembly::Identifier const& _identifier) bool AsmAnalyzer::operator()(FunctionalInstruction const& _instr) { + solAssert(!m_julia, ""); bool success = true; for (auto const& arg: _instr.arguments | boost::adaptors::reversed) { @@ -154,12 +157,12 @@ bool AsmAnalyzer::operator()(FunctionalInstruction const& _instr) bool AsmAnalyzer::operator()(assembly::StackAssignment const& _assignment) { + solAssert(!m_julia, ""); bool success = checkAssignment(_assignment.variableName, size_t(-1)); m_info.stackHeightInfo[&_assignment] = m_stackHeight; return success; } - bool AsmAnalyzer::operator()(assembly::Assignment const& _assignment) { int const stackHeight = m_stackHeight; @@ -454,8 +457,8 @@ Scope& AsmAnalyzer::scope(Block const* _block) void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _location) { -// if (!m_julia) -// return; + if (!m_julia) + return; if (!(set{"bool", "u8", "s8", "u32", "s32", "u64", "s64", "u128", "s128", "u256", "s256"}).count(type)) m_errors.push_back(make_shared( -- cgit v1.2.3 From efadf7e41f73b83f3a7793562cc26f3e92b0211d Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 26 May 2017 20:42:17 +0100 Subject: Change error message for invalid type --- libsolidity/inlineasm/AsmAnalysis.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libsolidity/inlineasm/AsmAnalysis.cpp') diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index eb6f8bc0..24eddf05 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -463,7 +463,7 @@ void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _loc if (!(set{"bool", "u8", "s8", "u32", "s32", "u64", "s64", "u128", "s128", "u256", "s256"}).count(type)) m_errors.push_back(make_shared( Error::Type::TypeError, - "User defined types (\"" + type + "\") are not supported yet.", + "\"" + type + "\" is not a valid type (user defined types are not yet supported).", _location )); } -- cgit v1.2.3 From 2a50e869d060bd42faae9003fa563398ba8b79c1 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 26 May 2017 20:43:28 +0100 Subject: Move builtin type list to the top --- libsolidity/inlineasm/AsmAnalysis.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libsolidity/inlineasm/AsmAnalysis.cpp') diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp index 24eddf05..eeb7d0a6 100644 --- a/libsolidity/inlineasm/AsmAnalysis.cpp +++ b/libsolidity/inlineasm/AsmAnalysis.cpp @@ -38,6 +38,12 @@ using namespace dev; using namespace dev::solidity; using namespace dev::solidity::assembly; +namespace { + +set const builtinTypes{"bool", "u8", "s8", "u32", "s32", "u64", "s64", "u128", "s128", "u256", "s256"}; + +} + bool AsmAnalyzer::analyze(Block const& _block) { if (!(ScopeFiller(m_info.scopes, m_errors))(_block)) @@ -460,7 +466,7 @@ void AsmAnalyzer::expectValidType(string const& type, SourceLocation const& _loc if (!m_julia) return; - if (!(set{"bool", "u8", "s8", "u32", "s32", "u64", "s64", "u128", "s128", "u256", "s256"}).count(type)) + if (!builtinTypes.count(type)) m_errors.push_back(make_shared( Error::Type::TypeError, "\"" + type + "\" is not a valid type (user defined types are not yet supported).", -- cgit v1.2.3