#include "debugger.h"
#include "value.h"
#include "object.h"
#include "types.h"
#include "interpreter.h"
#include "internal.h"
#include "ustring.h"
using namespace KJS;
namespace KJS {
struct AttachedInterpreter
{
public:
AttachedInterpreter(Interpreter *i) : interp(i) {}
Interpreter *interp;
AttachedInterpreter *next;
};
}
Debugger::Debugger()
{
rep = new DebuggerImp();
}
Debugger::~Debugger()
{
while (rep->interps)
detach(rep->interps->interp);
delete rep;
}
void Debugger::attach(Interpreter *interp)
{
if (interp->imp()->debugger() != this)
interp->imp()->setDebugger(this);
if (!rep->interps)
rep->interps = new AttachedInterpreter(interp);
else {
AttachedInterpreter *ai = rep->interps;
while (ai->next)
ai = ai->next;
ai->next = new AttachedInterpreter(interp);;
}
}
void Debugger::detach(Interpreter *interp)
{
if (interp->imp()->debugger() == this)
interp->imp()->setDebugger(this);
if (rep->interps->interp == interp) {
AttachedInterpreter *old = rep->interps;
rep->interps = rep->interps->next;
delete old;
}
AttachedInterpreter *ai = rep->interps;
while (ai->next && ai->next->interp != interp)
ai = ai->next;
if (ai->next) {
AttachedInterpreter *old = ai->next;
ai->next = ai->next->next;
delete old;
}
}
bool Debugger::sourceParsed(ExecState *, int ,
const UString &, int )
{
return true;
}
bool Debugger::sourceUnused(ExecState *, int )
{
return true;
}
bool Debugger::exception(ExecState *, int , int ,
Object &)
{
return true;
}
bool Debugger::atStatement(ExecState *, int , int ,
int )
{
return true;
}
bool Debugger::callEvent(ExecState *, int , int ,
Object &, const List &)
{
return true;
}
bool Debugger::returnEvent(ExecState *, int , int ,
Object &)
{
return true;
}