From 02133d0bd48a54a17a0b5d59b596c009fb512c19 Mon Sep 17 00:00:00 2001 From: melex750 Date: Mon, 21 Mar 2016 07:56:52 -0400 Subject: [PATCH] Fix method overloading --- src/CBot/CBotClass.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/CBot/CBotClass.cpp b/src/CBot/CBotClass.cpp index e701db86..27794d7f 100644 --- a/src/CBot/CBotClass.cpp +++ b/src/CBot/CBotClass.cpp @@ -33,6 +33,7 @@ #include "CBot/CBotExternalCall.h" #include "CBot/CBotStack.h" #include "CBot/CBotCStack.h" +#include "CBot/CBotDefParam.h" #include "CBot/CBotUtils.h" #include "CBot/CBotFileUtils.h" #include "CBot/CBotCallMethode.h" @@ -604,9 +605,14 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond) // return a method precompiled in pass 1 CBotFunction* pf = m_pMethod; CBotFunction* prev = nullptr; - while ( pf != nullptr ) + CBotToken* ppp = p; + CBotCStack* pStk = pStack->TokenStack(nullptr, true); + CBotDefParam* params = CBotDefParam::Compile(p, pStk ); + delete pStk; + p = ppp; + while ( pf != nullptr ) // search by name and parameters { - if (pf->GetName() == pp) break; + if (pf->GetName() == pp && pf->CheckParam( params )) break; prev = pf; pf = pf->Next(); } @@ -708,7 +714,7 @@ bool CBotClass::CompileDefItem(CBotToken* &p, CBotCStack* pStack, bool bSecond) i = CBotTwoOpExpr::Compile(p, pStack); if ( !(type.Eq(CBotTypPointer) && pStack->GetTypResult().Eq(CBotTypNullPointer)) && - !TypesCompatibles( type, pStack->GetTypResult()) ) + !TypesCompatibles( type2, pStack->GetTypResult()) ) { pStack->SetError(CBotErrBadType1, p->GetStart()); return false;