Virtual function calls.

This commit is contained in:
chriseth
2019-04-11 15:45:43 +02:00
committed by Mathias Baumann
parent 18ab8aeb85
commit 565d9837e4
8 changed files with 243 additions and 12 deletions
@@ -28,13 +28,16 @@
#include <string>
#include <memory>
#include <vector>
namespace dev
{
namespace solidity
{
class ContractDefinition;
class VariableDeclaration;
class FunctionDefinition;
class Expression;
/**
@@ -51,16 +54,30 @@ public:
std::shared_ptr<MultiUseYulFunctionCollector> functionCollector() const { return m_functions; }
/// Sets the current inheritance hierarchy from derived to base.
void setInheritanceHierarchy(std::vector<ContractDefinition const*> _hierarchy)
{
m_inheritanceHierarchy = std::move(_hierarchy);
}
std::string addLocalVariable(VariableDeclaration const& _varDecl);
std::string variableName(VariableDeclaration const& _varDecl);
std::string functionName(FunctionDefinition const& _function);
FunctionDefinition const& virtualFunction(FunctionDefinition const& _functionDeclaration);
std::string virtualFunctionName(FunctionDefinition const& _functionDeclaration);
std::string newYulVariable();
/// @returns the variable (or comma-separated list of variables) that contain
/// the value of the given expression.
std::string variable(Expression const& _expression);
std::string internalDispatch(size_t _in, size_t _out);
private:
langutil::EVMVersion m_evmVersion;
OptimiserSettings m_optimiserSettings;
std::vector<ContractDefinition const*> m_inheritanceHierarchy;
std::map<VariableDeclaration const*, std::string> m_localVariables;
std::shared_ptr<MultiUseYulFunctionCollector> m_functions;
size_t m_varCounter = 0;