Fix state after CompilerStack.reset()

This commit is contained in:
Alex Beregszaszi 2017-06-01 13:28:32 +01:00
parent c212d7c2e6
commit 998ca552b8
2 changed files with 26 additions and 1 deletions

View File

@ -85,6 +85,7 @@ void CompilerStack::reset(bool _keepSources)
}
else
{
m_stackState = Empty;
m_sources.clear();
}
m_optimize = false;
@ -94,7 +95,6 @@ void CompilerStack::reset(bool _keepSources)
m_sourceOrder.clear();
m_contracts.clear();
m_errorReporter.clear();
m_stackState = Empty;
}
bool CompilerStack::addSource(string const& _name, string const& _content, bool _isLibrary)
@ -513,6 +513,24 @@ ContractDefinition const& CompilerStack::contractDefinition(string const& _contr
return *contract(_contractName).contract;
}
size_t CompilerStack::functionEntryPoint(
std::string const& _contractName,
FunctionDefinition const& _function
) const
{
shared_ptr<Compiler> const& compiler = contract(_contractName).compiler;
if (!compiler)
return 0;
eth::AssemblyItem tag = compiler->functionEntryLabel(_function);
if (tag.type() == eth::UndefinedItem)
return 0;
eth::AssemblyItems const& items = compiler->runtimeAssemblyItems();
for (size_t i = 0; i < items.size(); ++i)
if (items.at(i).type() == eth::Tag && items.at(i).data() == tag.data())
return i;
return 0;
}
tuple<int, int, int, int> CompilerStack::positionFromSourceLocation(SourceLocation const& _sourceLocation) const
{
int startLine;

View File

@ -259,6 +259,13 @@ private:
Json::Value const& contractABI(Contract const&) const;
Json::Value const& natspec(Contract const&, DocumentationType _type) const;
/// @returns the offset of the entry point of the given function into the list of assembly items
/// or zero if it is not found or does not exist.
size_t functionEntryPoint(
std::string const& _contractName,
FunctionDefinition const& _function
) const;
struct Remapping
{
std::string context;