diff options
-rw-r--r-- | CompilerContext.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/CompilerContext.cpp b/CompilerContext.cpp index ee8d3e00..f787db7f 100644 --- a/CompilerContext.cpp +++ b/CompilerContext.cpp @@ -106,8 +106,12 @@ eth::AssemblyItem CompilerContext::getVirtualFunctionEntryLabel(FunctionDefiniti solAssert(!m_inheritanceHierarchy.empty(), "No inheritance hierarchy set."); for (ContractDefinition const* contract: m_inheritanceHierarchy) for (ASTPointer<FunctionDefinition> const& function: contract->getDefinedFunctions()) - if (!function->isConstructor() && function->getName() == _function.getName()) + { + if (!function->isConstructor() && + dynamic_cast<FunctionType const&>(*function->getType()).getCanonicalSignature() == + dynamic_cast<FunctionType const&>(*_function.getType()).getCanonicalSignature()) return getFunctionEntryLabel(*function); + } solAssert(false, "Virtual function " + _function.getName() + " not found."); return m_asm.newTag(); // not reached } @@ -117,7 +121,7 @@ eth::AssemblyItem CompilerContext::getSuperFunctionEntryLabel(string const& _nam auto it = getSuperContract(_base); for (; it != m_inheritanceHierarchy.end(); ++it) for (ASTPointer<FunctionDefinition> const& function: (*it)->getDefinedFunctions()) - if (!function->isConstructor() && function->getName() == _name) + if (!function->isConstructor() && function->getName() == _name) // TODO: add a test case for this! return getFunctionEntryLabel(*function); solAssert(false, "Super function " + _name + " not found."); return m_asm.newTag(); // not reached |