bool DebugState::clearBreakpointsIn(JSContext* cx, WasmInstanceObject* instance, js::Debugger* dbg, JSObject* handler) { MOZ_ASSERT(instance); if (!breakpointSites_.initialized()) return true; // Make copy of all sites list, so breakpointSites_ can be modified by // destroyBreakpointSite calls. Vector<WasmBreakpointSite*> sites(cx); if (!sites.resize(breakpointSites_.count())) return false; size_t i = 0; for (WasmBreakpointSiteMap::Range r = breakpointSites_.all(); !r.empty(); r.popFront()) sites[i++] = r.front().value(); for (WasmBreakpointSite* site : sites) { Breakpoint* nextbp; for (Breakpoint* bp = site->firstBreakpoint(); bp; bp = nextbp) { nextbp = bp->nextInSite(); if (bp->asWasm()->wasmInstance == instance && (!dbg || bp->debugger == dbg) && (!handler || bp->getHandler() == handler)) { bp->destroy(cx->runtime()->defaultFreeOp()); } } } return true; }
void JSCompartment::clearBreakpointsIn(JSContext *cx, js::Debugger *dbg, JSScript *script, JSObject *handler) { JS_ASSERT_IF(script, script->compartment() == this); for (BreakpointSiteMap::Enum e(breakpointSites); !e.empty(); e.popFront()) { BreakpointSite *site = e.front().value; if (!script || site->script == script) { Breakpoint *nextbp; for (Breakpoint *bp = site->firstBreakpoint(); bp; bp = nextbp) { nextbp = bp->nextInSite(); if ((!dbg || bp->debugger == dbg) && (!handler || bp->getHandler() == handler)) bp->destroy(cx, &e); } } } }