зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1443583 - Part 2.6: Make DebuggerFrame_freeScriptFrameIterData a method of DebuggerFrame. r=jimb.
Most of the work is to smooth out the types. --HG-- extra : rebase_source : ced16a162ccf88ebabe978eb147144e9e397128b extra : intermediate-source : 1f5a232b063b6bdd63dfd4c6c580f6e67408d135 extra : source : a01b5c2d22d1d3063e9ef57706486c8a26658896
This commit is contained in:
Родитель
77f4e69c96
Коммит
f476ac382d
|
@ -916,9 +916,6 @@ static void
|
|||
DebuggerFrame_maybeDecrementFrameScriptStepModeCount(FreeOp* fop, AbstractFramePtr frame,
|
||||
NativeObject* frameobj);
|
||||
|
||||
static void
|
||||
DebuggerFrame_freeScriptFrameIterData(FreeOp* fop, JSObject* obj);
|
||||
|
||||
/*
|
||||
* Handle leaving a frame with debuggers watching. |frameOk| indicates whether
|
||||
* the frame is exiting normally or abruptly. Set |cx|'s exception and/or
|
||||
|
@ -4158,9 +4155,9 @@ Debugger::removeDebuggeeGlobal(FreeOp* fop, GlobalObject* global,
|
|||
*/
|
||||
for (FrameMap::Enum e(frames); !e.empty(); e.popFront()) {
|
||||
AbstractFramePtr frame = e.front().key();
|
||||
NativeObject* frameobj = e.front().value();
|
||||
DebuggerFrame* frameobj = e.front().value();
|
||||
if (frame.global() == global) {
|
||||
DebuggerFrame_freeScriptFrameIterData(fop, frameobj);
|
||||
frameobj->freeFrameIterData(fop);
|
||||
DebuggerFrame_maybeDecrementFrameScriptStepModeCount(fop, frame, frameobj);
|
||||
e.removeFront();
|
||||
}
|
||||
|
@ -6362,7 +6359,7 @@ Debugger::replaceFrameGuts(JSContext* cx, AbstractFramePtr from, AbstractFramePt
|
|||
Debugger* dbg = Debugger::fromChildJSObject(frameobj);
|
||||
|
||||
// Update frame object's ScriptFrameIter::data pointer.
|
||||
DebuggerFrame_freeScriptFrameIterData(cx->runtime()->defaultFreeOp(), frameobj);
|
||||
frameobj->freeFrameIterData(cx->runtime()->defaultFreeOp());
|
||||
ScriptFrameIter::Data* data = iter.copyData();
|
||||
if (!data) {
|
||||
// An OOM here means that some Debuggers' frame maps may still
|
||||
|
@ -6391,7 +6388,7 @@ Debugger::replaceFrameGuts(JSContext* cx, AbstractFramePtr from, AbstractFramePt
|
|||
// Debugger's frame map, so it will not be cleaned up by neither
|
||||
// lambda. Manually clean it up here.
|
||||
FreeOp* fop = cx->runtime()->defaultFreeOp();
|
||||
DebuggerFrame_freeScriptFrameIterData(fop, frameobj);
|
||||
frameobj->freeFrameIterData(fop);
|
||||
DebuggerFrame_maybeDecrementFrameScriptStepModeCount(fop, to, frameobj);
|
||||
|
||||
ReportOutOfMemory(cx);
|
||||
|
@ -6409,18 +6406,18 @@ Debugger::replaceFrameGuts(JSContext* cx, AbstractFramePtr from, AbstractFramePt
|
|||
Debugger::inFrameMaps(AbstractFramePtr frame)
|
||||
{
|
||||
bool foundAny = false;
|
||||
forEachDebuggerFrame(frame, [&](NativeObject* frameobj) { foundAny = true; });
|
||||
forEachDebuggerFrame(frame, [&](DebuggerFrame* frameobj) { foundAny = true; });
|
||||
return foundAny;
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
Debugger::removeFromFrameMapsAndClearBreakpointsIn(JSContext* cx, AbstractFramePtr frame)
|
||||
{
|
||||
forEachDebuggerFrame(frame, [&](NativeObject* frameobj) {
|
||||
forEachDebuggerFrame(frame, [&](DebuggerFrame* frameobj) {
|
||||
Debugger* dbg = Debugger::fromChildJSObject(frameobj);
|
||||
|
||||
FreeOp* fop = cx->runtime()->defaultFreeOp();
|
||||
DebuggerFrame_freeScriptFrameIterData(fop, frameobj);
|
||||
frameobj->freeFrameIterData(fop);
|
||||
DebuggerFrame_maybeDecrementFrameScriptStepModeCount(fop, frame, frameobj);
|
||||
|
||||
dbg->frames.remove(frame);
|
||||
|
@ -8086,13 +8083,12 @@ DebuggerFrame::requireScriptReferent(JSContext* cx, HandleDebuggerFrame frame)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
DebuggerFrame_freeScriptFrameIterData(FreeOp* fop, JSObject* obj)
|
||||
void
|
||||
DebuggerFrame::freeFrameIterData(FreeOp* fop)
|
||||
{
|
||||
DebuggerFrame& frame = obj->as<DebuggerFrame>();
|
||||
if (FrameIter::Data* data = frame.frameIterData()) {
|
||||
if (FrameIter::Data* data = frameIterData()) {
|
||||
fop->delete_(data);
|
||||
frame.setPrivate(nullptr);
|
||||
setPrivate(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8115,11 +8111,12 @@ static void
|
|||
DebuggerFrame_finalize(FreeOp* fop, JSObject* obj)
|
||||
{
|
||||
MOZ_ASSERT(fop->maybeOnHelperThread());
|
||||
DebuggerFrame_freeScriptFrameIterData(fop, obj);
|
||||
OnStepHandler* onStepHandler = obj->as<DebuggerFrame>().onStepHandler();
|
||||
DebuggerFrame& frameobj = obj->as<DebuggerFrame>();
|
||||
frameobj.freeFrameIterData(fop);
|
||||
OnStepHandler* onStepHandler = frameobj.onStepHandler();
|
||||
if (onStepHandler)
|
||||
onStepHandler->drop();
|
||||
OnPopHandler* onPopHandler = obj->as<DebuggerFrame>().onPopHandler();
|
||||
OnPopHandler* onPopHandler = frameobj.onPopHandler();
|
||||
if (onPopHandler)
|
||||
onPopHandler->drop();
|
||||
}
|
||||
|
|
|
@ -722,7 +722,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger>
|
|||
static bool updateExecutionObservability(JSContext* cx, ExecutionObservableSet& obs,
|
||||
IsObserving observing);
|
||||
|
||||
template <typename FrameFn /* void (NativeObject*) */>
|
||||
template <typename FrameFn /* void (DebuggerFrame*) */>
|
||||
static void forEachDebuggerFrame(AbstractFramePtr frame, FrameFn fn);
|
||||
|
||||
/*
|
||||
|
@ -1332,6 +1332,7 @@ class DebuggerFrame : public NativeObject
|
|||
static NativeObject* initClass(JSContext* cx, HandleObject dbgCtor, HandleObject objProto);
|
||||
static DebuggerFrame* create(JSContext* cx, HandleObject proto, const FrameIter& iter,
|
||||
HandleNativeObject debugger);
|
||||
void freeFrameIterData(FreeOp* fop);
|
||||
|
||||
static MOZ_MUST_USE bool getArguments(JSContext* cx, HandleDebuggerFrame frame,
|
||||
MutableHandleDebuggerArguments result);
|
||||
|
|
Загрузка…
Ссылка в новой задаче