This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit 48666c4604a5fbe897c7609767e4ee1ca4da5b35 Author: melex750 <melex...@users.noreply.github.com> Date: Wed Aug 3 17:42:10 2016 -0400 Fix not calling destructors after save/reload --- src/CBot/CBotStack.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/CBot/CBotStack.cpp b/src/CBot/CBotStack.cpp index 3170fb7..27c648f 100644 --- a/src/CBot/CBotStack.cpp +++ b/src/CBot/CBotStack.cpp @@ -760,7 +760,17 @@ bool CBotVar::Save0State(FILE* pf) if (!WriteWord(pf, 100+static_cast<int>(m_mPrivate)))return false; // private variable? if (!WriteWord(pf, m_bStatic))return false; // static variable? if (!WriteWord(pf, m_type.GetType()))return false; // saves the type (always non-zero) - if (!WriteWord(pf, static_cast<unsigned short>(m_binit))) return false; // variable defined? + + if (m_type.Eq(CBotTypPointer) && GetPointer() != nullptr) + { + if (GetPointer()->m_bConstructor) // constructor was called? + { + if (!WriteWord(pf, (2000 + static_cast<unsigned short>(m_binit)) )) return false; + return WriteString(pf, m_token->GetString()); // and variable name + } + } + + if (!WriteWord(pf, static_cast<unsigned short>(m_binit))) return false; // variable defined? return WriteString(pf, m_token->GetString()); // and variable name } @@ -800,6 +810,13 @@ bool CBotVar::RestoreState(FILE* pf, CBotVar* &pVar) if ( w == CBotTypClass ) w = CBotTypIntrinsic; // necessarily intrinsic if (!ReadWord(pf, wi)) return false; // init ? + bool bConstructor = false; + if (w == CBotTypPointer && wi >= 2000) + { + wi -= 2000; + bConstructor = true; + } + CBotVar::InitType initType = static_cast<CBotVar::InitType>(wi); if (!ReadString(pf, name)) return false; // variable name @@ -868,9 +885,10 @@ bool CBotVar::RestoreState(FILE* pf, CBotVar* &pVar) case CBotTypPointer: case CBotTypNullPointer: - if (!ReadString(pf, s)) return false; + if (!ReadString(pf, s)) return false; // name of the class { - pNew = CBotVar::Create(token, CBotTypResult(w, s));// creates a variable + CBotTypResult ptrType(w, s); + pNew = CBotVar::Create(token, ptrType);// creates a variable // CBotVarClass* p = nullptr; long id; ReadLong(pf, id); @@ -881,6 +899,8 @@ bool CBotVar::RestoreState(FILE* pf, CBotVar* &pVar) if ( !CBotVar::RestoreState( pf, pInstance ) ) return false; (static_cast<CBotVarPointer*>(pNew))->SetPointer( pInstance ); // and point over + if (bConstructor) pNew->ConstructorSet(); // constructor was called + // if ( p != nullptr ) (static_cast<CBotVarPointer*>(pNew))->SetPointer( p ); // rather this one } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits