// $Id: BreakPointBase.cc 5854 2006-11-06 18:24:21Z m9710797 $ #include "BreakPointBase.hh" #include "TclObject.hh" #include "CommandException.hh" #include "MSXCliComm.hh" #include "ScopedAssign.hh" namespace openmsx { BreakPointBase::BreakPointBase(MSXCliComm& cliComm_, std::auto_ptr command_, std::auto_ptr condition_) : cliComm(cliComm_), command(command_), condition(condition_) , executing(false) { } BreakPointBase::~BreakPointBase() { } std::string BreakPointBase::getCondition() const { return condition.get() ? condition->getString() : ""; } std::string BreakPointBase::getCommand() const { return command->getString(); } bool BreakPointBase::isTrue() const { if (!condition.get()) { // unconditional bp return true; } try { return condition->evalBool(); } catch (CommandException& e) { cliComm.printWarning(e.getMessage()); return false; } } void BreakPointBase::checkAndExecute() { if (executing) { // no recursive execution return; } ScopedAssign sa(executing, true); if (isTrue()) { try { command->executeCommand(true); // compile command } catch (CommandException& e) { cliComm.printWarning(e.getMessage()); } } } } // namespace openmsx