Browse Source

Solidity EntryLabel now uses a generic declaration

- Instead of a FunctionDefinition
cl-refactor
Lefteris Karapetsas 10 years ago
parent
commit
10da71f90e
  1. 10
      libsolidity/Compiler.cpp
  2. 6
      libsolidity/CompilerContext.cpp
  3. 2
      libsolidity/CompilerContext.h

10
libsolidity/Compiler.cpp

@ -43,9 +43,13 @@ void Compiler::compileContract(ContractDefinition const& _contract,
for (ContractDefinition const* contract: _contract.getLinearizedBaseContracts()) for (ContractDefinition const* contract: _contract.getLinearizedBaseContracts())
{ {
for (ASTPointer<FunctionDefinition> const& function: contract->getDefinedFunctions()) for (auto const& it: contract->getInterfaceFunctions())
if (!function->isConstructor()) {
m_context.addFunction(*function); auto funcDef = it.second.getFunctionDefinition();
if (funcDef && funcDef->isConstructor())
continue;
m_context.addFunction(*it.second.getDeclaration());
}
for (ASTPointer<ModifierDefinition> const& modifier: contract->getFunctionModifiers()) for (ASTPointer<ModifierDefinition> const& modifier: contract->getFunctionModifiers())
m_context.addModifier(*modifier); m_context.addModifier(*modifier);
} }

6
libsolidity/CompilerContext.cpp

@ -59,11 +59,11 @@ void CompilerContext::addAndInitializeVariable(VariableDeclaration const& _decla
*this << u256(0); *this << u256(0);
} }
void CompilerContext::addFunction(FunctionDefinition const& _function) void CompilerContext::addFunction(Declaration const& _decl)
{ {
eth::AssemblyItem tag(m_asm.newTag()); eth::AssemblyItem tag(m_asm.newTag());
m_functionEntryLabels.insert(make_pair(&_function, tag)); m_functionEntryLabels.insert(make_pair(&_decl, tag));
m_virtualFunctionEntryLabels.insert(make_pair(_function.getName(), tag)); m_virtualFunctionEntryLabels.insert(make_pair(_decl.getName(), tag));
} }
void CompilerContext::addModifier(ModifierDefinition const& _modifier) void CompilerContext::addModifier(ModifierDefinition const& _modifier)

2
libsolidity/CompilerContext.h

@ -44,7 +44,7 @@ public:
void startNewFunction() { m_localVariables.clear(); m_asm.setDeposit(0); } void startNewFunction() { m_localVariables.clear(); m_asm.setDeposit(0); }
void addVariable(VariableDeclaration const& _declaration, unsigned _offsetToCurrent = 0); void addVariable(VariableDeclaration const& _declaration, unsigned _offsetToCurrent = 0);
void addAndInitializeVariable(VariableDeclaration const& _declaration); void addAndInitializeVariable(VariableDeclaration const& _declaration);
void addFunction(FunctionDefinition const& _function); void addFunction(Declaration const& _decl);
/// Adds the given modifier to the list by name if the name is not present already. /// Adds the given modifier to the list by name if the name is not present already.
void addModifier(ModifierDefinition const& _modifier); void addModifier(ModifierDefinition const& _modifier);

Loading…
Cancel
Save