From c87d788f78d36b6cebdc2eda3b04c6329f637818 Mon Sep 17 00:00:00 2001 From: Bhargava Shastry Date: Fri, 30 Apr 2021 16:26:33 +0200 Subject: [PATCH] Add assignment statement --- test/tools/ossfuzz/SolidityGenerator.cpp | 11 ++++++++--- test/tools/ossfuzz/SolidityGenerator.h | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/test/tools/ossfuzz/SolidityGenerator.cpp b/test/tools/ossfuzz/SolidityGenerator.cpp index 4f5f09e90..56b5e4d9d 100644 --- a/test/tools/ossfuzz/SolidityGenerator.cpp +++ b/test/tools/ossfuzz/SolidityGenerator.cpp @@ -274,7 +274,7 @@ string AssignmentStmtGenerator::visit() auto rhs = exprGen.expression(lhs.value().first); if (!rhs.has_value()) return "\n"; - return lhs.value().second + " = " + rhs.value().second + ";\n"; + return indentation() + lhs.value().second + " = " + rhs.value().second + ";\n"; } void StatementGenerator::setup() @@ -346,6 +346,7 @@ string FunctionGenerator::visit() function << " returns" << state->currentFunctionState()->params(FunctionState::Params::OUTPUT); function << "\n" << generator()->visit(); + generator()->endVisit(); return function.str(); } @@ -383,10 +384,14 @@ optional> ExpressionGenerator::expression() optional> ExpressionGenerator::expression(SolidityTypePtr _type) { auto liveTypedVariables = state->currentFunctionState()->inputs | - ranges::views::filter([&_type](auto& _item) { return _item.first == _type; }) | + ranges::views::filter([&_type](auto& _item) { + return _item.first.index() == _type.index() && visit(TypeComparator{}, _item.first, _type); + }) | ranges::to>>(); liveTypedVariables += state->currentFunctionState()->outputs | - ranges::views::filter([&_type](auto& _item) { return _item.first == _type; }) | + ranges::views::filter([&_type](auto& _item) { + return _item.first.index() == _type.index() && visit(TypeComparator{}, _item.first, _type); + }) | ranges::to>>(); if (liveTypedVariables.empty()) return nullopt; diff --git a/test/tools/ossfuzz/SolidityGenerator.h b/test/tools/ossfuzz/SolidityGenerator.h index e806491d2..603764429 100644 --- a/test/tools/ossfuzz/SolidityGenerator.h +++ b/test/tools/ossfuzz/SolidityGenerator.h @@ -614,6 +614,22 @@ struct TypeProvider std::shared_ptr state; }; +struct TypeComparator +{ + template + bool operator()(T _i1, T _i2) + { + return *_i1 == *_i2; + } + template + bool operator()(T1 _i1, T2 _i2) + { + if (std::is_same_v) + return this->template operator()(_i1, _i2); + return false; + } +}; + struct ExpressionGenerator { ExpressionGenerator(std::shared_ptr _state): state(std::move(_state))