[colobot] 57/74: Remove "this == nullptr" checks in CBOT, fixes #828
Didier Raboud
odyx at moszumanska.debian.org
Mon Nov 7 07:50:05 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit bb9d1c82655af26f13cbf5dc094a8bd7f0f351a9
Author: krzys-h <krzys_h at interia.pl>
Date: Sun Oct 2 21:36:59 2016 +0200
Remove "this == nullptr" checks in CBOT, fixes #828
---
src/CBot/CBotClass.cpp | 6 +++---
src/CBot/CBotProgram.cpp | 21 ++++++++++++++-------
src/CBot/CBotStack.cpp | 14 +++++++-------
src/CBot/CBotVar/CBotVarClass.cpp | 5 ++---
4 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/src/CBot/CBotClass.cpp b/src/CBot/CBotClass.cpp
index 460ab9f..8efc4af 100644
--- a/src/CBot/CBotClass.cpp
+++ b/src/CBot/CBotClass.cpp
@@ -92,7 +92,7 @@ void CBotClass::ClearPublic()
////////////////////////////////////////////////////////////////////////////////
void CBotClass::Purge()
{
- if ( this == nullptr ) return;
+ assert ( this != nullptr );
delete m_pVar;
m_pVar = nullptr;
@@ -104,7 +104,7 @@ void CBotClass::Purge()
m_nbVar = m_parent == nullptr ? 0 : m_parent->m_nbVar;
- m_next->Purge();
+ if (m_next != nullptr) m_next->Purge();
m_next = nullptr; // no longer belongs to this chain
}
@@ -205,7 +205,7 @@ std::string CBotClass::GetName()
////////////////////////////////////////////////////////////////////////////////
CBotClass* CBotClass::GetParent()
{
- if ( this == nullptr ) return nullptr;
+ assert ( this != nullptr );
return m_parent;
}
diff --git a/src/CBot/CBotProgram.cpp b/src/CBot/CBotProgram.cpp
index 8100829..17c5ec0 100644
--- a/src/CBot/CBotProgram.cpp
+++ b/src/CBot/CBotProgram.cpp
@@ -47,13 +47,13 @@ CBotProgram::CBotProgram(CBotVar* thisVar)
CBotProgram::~CBotProgram()
{
// delete m_classes;
- m_classes->Purge();
+ if (m_classes != nullptr) m_classes->Purge();
m_classes = nullptr;
CBotClass::FreeLock(this);
delete m_functions;
- m_stack->Delete();
+ if (m_stack != nullptr) m_stack->Delete();
}
bool CBotProgram::Compile(const std::string& program, std::vector<std::string>& functions, void* pUser)
@@ -62,7 +62,7 @@ bool CBotProgram::Compile(const std::string& program, std::vector<std::string>&
Stop();
// delete m_classes;
- m_classes->Purge(); // purge the old definitions of classes
+ if (m_classes != nullptr) m_classes->Purge(); // purge the old definitions of classes
// but without destroying the object
m_classes = nullptr;
delete m_functions; m_functions = nullptr;
@@ -227,8 +227,11 @@ bool CBotProgram::Run(void* pUser, int timer)
void CBotProgram::Stop()
{
- m_stack->Delete();
- m_stack = nullptr;
+ if (m_stack != nullptr)
+ {
+ m_stack->Delete();
+ m_stack = nullptr;
+ }
m_entryPoint = nullptr;
CBotClass::FreeLock(this);
}
@@ -365,11 +368,15 @@ bool CBotProgram::RestoreState(FILE* pf)
if (!ReadString( pf, s )) return false;
Start(s); // point de reprise
- m_stack->Delete();
- m_stack = nullptr;
+ if (m_stack != nullptr)
+ {
+ m_stack->Delete();
+ m_stack = nullptr;
+ }
// retrieves the stack from the memory
// uses a nullptr pointer (m_stack) but it's ok like that
+ // TODO: no it's not okay like that! but it looks like it doesn't get optimized out at least ~krzys_h
if (!m_stack->RestoreState(pf, m_stack)) return false;
m_stack->SetProgram(this); // bases for routines
diff --git a/src/CBot/CBotStack.cpp b/src/CBot/CBotStack.cpp
index 295e606..94697b4 100644
--- a/src/CBot/CBotStack.cpp
+++ b/src/CBot/CBotStack.cpp
@@ -82,10 +82,10 @@ CBotStack* CBotStack::AllocateStack()
////////////////////////////////////////////////////////////////////////////////
void CBotStack::Delete()
{
- if ( this == nullptr ) return;
+ assert ( this != nullptr );
- m_next->Delete();
- m_next2->Delete();
+ if (m_next != nullptr) m_next->Delete();
+ if (m_next2 != nullptr) m_next2->Delete();
if (m_prev != nullptr)
{
@@ -192,8 +192,8 @@ bool CBotStack::Return(CBotStack* pfils)
m_var = pfils->m_var; // result transmitted
pfils->m_var = nullptr; // not to destroy the variable
- m_next->Delete();m_next = nullptr; // releases the stack above
- m_next2->Delete();m_next2 = nullptr; // also the second stack (catch)
+ if (m_next != nullptr) m_next->Delete();m_next = nullptr; // releases the stack above
+ if (m_next2 != nullptr) m_next2->Delete();m_next2 = nullptr; // also the second stack (catch)
return IsOk(); // interrupted if error
}
@@ -281,7 +281,7 @@ bool CBotStack::IfContinue(int state, const std::string& name)
m_state = state; // where again?
m_error = CBotNoErr;
m_labelBreak.clear();
- m_next->Delete(); // purge above stack
+ if (m_next != nullptr) m_next->Delete(); // purge above stack
return true;
}
@@ -478,7 +478,7 @@ bool CBotStack::Execute()
if (!instr->Run(nullptr, pile)) return false; // resume interrupted execution
- pile->m_next->Delete();
+ if (pile->m_next != nullptr) pile->m_next->Delete();
pile->m_callFinished = true;
return true;
diff --git a/src/CBot/CBotVar/CBotVarClass.cpp b/src/CBot/CBotVar/CBotVarClass.cpp
index 08acffb..4da99b2 100644
--- a/src/CBot/CBotVar/CBotVarClass.cpp
+++ b/src/CBot/CBotVar/CBotVarClass.cpp
@@ -69,11 +69,10 @@ CBotVarClass::CBotVarClass(const CBotToken& name, const CBotTypResult& type)
m_instances.insert(this);
CBotClass* pClass = type.GetClass();
- CBotClass* pClass2 = pClass->GetParent();
- if ( pClass2 != nullptr )
+ if ( pClass != nullptr && pClass->GetParent() != nullptr )
{
// also creates an instance of the parent class
- m_pParent = new CBotVarClass(name, CBotTypResult(type.GetType(),pClass2) ); //, nIdent);
+ m_pParent = new CBotVarClass(name, CBotTypResult(type.GetType(), pClass->GetParent()) ); //, nIdent);
}
SetClass( pClass );
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list