From e008f3f808b1483e7b7a5861ea4fe46fbe74bcff Mon Sep 17 00:00:00 2001 From: Lu Guanqun Date: Sun, 1 Mar 2015 11:34:12 +0800 Subject: [PATCH] the contract interfaces should take overloaded function into consideration TODO: --- CompilerContext.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CompilerContext.cpp b/CompilerContext.cpp index ee8d3e00c..f787db7fc 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 const& function: contract->getDefinedFunctions()) - if (!function->isConstructor() && function->getName() == _function.getName()) + { + if (!function->isConstructor() && + dynamic_cast(*function->getType()).getCanonicalSignature() == + dynamic_cast(*_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 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