Move some C4AulDebug code into C4AulDebug

floating-point
Günther Brammer 2011-03-03 00:58:43 +01:00
parent 8749395a18
commit 45620c2b85
8 changed files with 40 additions and 47 deletions

View File

@ -30,6 +30,7 @@
#include <C4Include.h>
#include <C4Game.h>
#include <C4AulDebug.h>
#include <C4DefList.h>
#include <C4Effects.h>
#include <C4FileMonitor.h>
@ -2286,7 +2287,7 @@ bool C4Game::LinkScriptEngine()
// Activate debugger if requested
if (DebugPort)
if (!::ScriptEngine.InitDebug(DebugPort, DebugPassword.getData(), DebugHost.getData(), !!DebugWait))
if (!::C4AulDebug::InitDebug(DebugPort, DebugPassword.getData(), DebugHost.getData(), DebugWait))
return false;
return true;

View File

@ -250,7 +250,7 @@ void C4ControlScript::Execute() const
C4Value rVal(pScript->DirectExec(pObj, szScript, "console script", false, C4AulScript::MAXSTRICT, fUseVarsFromCallerContext ? AulExec.GetContext(AulExec.GetContextDepth()-1) : NULL));
#ifndef NOAULDEBUG
C4AulDebug* pDebug;
if ( (pDebug = ::ScriptEngine.GetDebugger()) )
if ( (pDebug = C4AulDebug::GetDebugger()) )
{
pDebug->ControlScriptEvaluated(szScript, rVal.GetDataString().getData());
}

View File

@ -180,7 +180,7 @@ bool Log(const char *szMessage)
#ifndef NOAULDEBUG
// Pass on to debugger
if (C4AulDebug *pDebug = ::ScriptEngine.GetDebugger())
if (C4AulDebug *pDebug = C4AulDebug::GetDebugger())
pDebug->OnLog(szMessage);
#endif
// Pass on to console

View File

@ -447,10 +447,6 @@ C4AulScriptEngine::C4AulScriptEngine():
GlobalConstNames.Reset();
GlobalConsts.Reset();
GlobalConsts.SetNameList(&GlobalConstNames);
#ifndef NOAULDEBUG
pDebug = NULL;
#endif
}
@ -460,7 +456,7 @@ void C4AulScriptEngine::Clear()
{
#ifndef NOAULDEBUG
// stop debugger
delete pDebug; pDebug = NULL;
delete C4AulDebug::GetDebugger();
#endif
// clear inherited
C4AulScript::Clear();
@ -526,34 +522,6 @@ void C4AulScriptEngine::CompileFunc(StdCompiler *pComp)
pComp->Value(mkNamingAdapt(GlobalNamed, "GlobalNamed" , GlobalNamedDefault));
}
bool C4AulScriptEngine::InitDebug(uint16_t iPort, const char *szPassword, const char *szHost, bool fWait)
{
#ifndef NOAULDEBUG
// Create debug object
if (!pDebug) pDebug = new C4AulDebug();
// Initialize
pDebug->SetPassword(szPassword);
pDebug->SetAllowed(szHost);
pDebug->SetEngine(&AulExec);
if (!pDebug->Init(iPort))
{ LogFatal("C4Aul debugger failed to initialize!"); return false; }
// Log
LogF("C4Aul debugger initialized on port %d", iPort);
// Add to application
Application.Add(pDebug);
// Wait for connection
if (fWait)
{
Log("C4Aul debugger waiting for connection...");
while (!pDebug->isConnected())
if (!Application.ScheduleProcs())
return false;
}
#endif
// Done
return true;
}
std::list<char*> C4AulScriptEngine::GetFunctionNames(C4AulScript * script)
{
std::list<char*> functions;

View File

@ -522,9 +522,6 @@ class C4AulScriptEngine : public C4AulScript
{
protected:
C4AulFuncMap FuncLookUp;
#ifndef NOAULDEBUG
C4AulDebug *pDebug;
#endif
public:
int warnCnt, errCnt; // number of warnings/errors
@ -564,11 +561,6 @@ public:
bool DenumerateVariablePointers();
void UnLink(); // called when a script is being reloaded (clears string table)
bool InitDebug(uint16_t iPort, const char *szPassword, const char *szHost, bool fWait);
#ifndef NOAULDEBUG
inline C4AulDebug *GetDebugger() const { return pDebug; }
#endif
// Compile scenario script data (without strings and constants)
void CompileFunc(StdCompiler *pComp);

View File

@ -42,6 +42,33 @@ C4AulDebug::~C4AulDebug()
{
for (std::list<StdStrBuf*>::iterator it = StackTrace.begin(); it != StackTrace.end(); it++)
{delete *it;}
if (pDebug == this) pDebug = NULL;
}
bool C4AulDebug::InitDebug(uint16_t iPort, const char *szPassword, const char *szHost, bool fWait)
{
// Create debug object
if (!pDebug) pDebug = new C4AulDebug();
// Initialize
pDebug->SetPassword(szPassword);
pDebug->SetAllowed(szHost);
pDebug->SetEngine(&AulExec);
if (!pDebug->Init(iPort))
{ LogFatal("C4Aul debugger failed to initialize!"); return false; }
// Log
LogF("C4Aul debugger initialized on port %d", iPort);
// Add to application
Application.Add(pDebug);
// Wait for connection
if (fWait)
{
Log("C4Aul debugger waiting for connection...");
while (!pDebug->isConnected())
if (!Application.ScheduleProcs())
return false;
}
// Done
return true;
}
void C4AulDebug::PackPacket(const C4NetIOPacket &rPacket, StdBuf &rOutBuf)
@ -498,4 +525,6 @@ StdStrBuf C4AulDebug::FormatCodePos(C4AulScriptContext *pCtx, C4AulBCC *pCPos)
return FormatString("%s:%d", RelativePath(pCtx->Func->pOrgScript->ScriptName), iLine);
}
C4AulDebug * C4AulDebug::pDebug = NULL;
#endif

View File

@ -30,10 +30,13 @@ class C4AulDebug : public C4NetIOTCP, private C4NetIO::CBClass
public:
C4AulDebug();
~C4AulDebug();
static bool InitDebug(uint16_t iPort, const char *szPassword, const char *szHost, bool fWait);
static inline C4AulDebug *GetDebugger() { return pDebug; }
private:
bool fInit, fConnected;
class C4AulExec *pExec;
static C4AulDebug *pDebug;
C4NetIO::addr_t PeerAddr, AllowedAddr;
StdCopyStrBuf Password;

View File

@ -161,7 +161,7 @@ C4Value C4AulExec::Exec(C4AulBCC *pCPos, bool fPassErrors)
#ifndef NOAULDEBUG
// Debugger pointer
C4AulDebug * const pDebug = ::ScriptEngine.GetDebugger();
C4AulDebug * const pDebug = C4AulDebug::GetDebugger();
if (pDebug)
pDebug->DebugStepIn(pCPos);
#endif
@ -882,7 +882,7 @@ C4AulBCC *C4AulExec::Call(C4AulFunc *pFunc, C4Value *pReturn, C4Value *pPars, C4
#ifndef NOAULDEBUG
// Notify debugger
if (C4AulDebug *pDebug = ::ScriptEngine.GetDebugger())
if (C4AulDebug *pDebug = C4AulDebug::GetDebugger())
pDebug->DebugStepIn(pSFunc->GetCode());
#endif
@ -945,7 +945,7 @@ C4AulBCC *C4AulExec::Call(C4AulFunc *pFunc, C4Value *pReturn, C4Value *pPars, C4
#ifndef NOAULDEBUG
// Notify debugger
if (C4AulDebug *pDebug = ::ScriptEngine.GetDebugger())
if (C4AulDebug *pDebug = C4AulDebug::GetDebugger())
{
// Make dummy context
C4AulScriptContext ctx;