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:
Jason Orendorff 2018-03-13 12:41:23 -05:00
Родитель 77f4e69c96
Коммит f476ac382d
2 изменённых файлов: 17 добавлений и 19 удалений

Просмотреть файл

@ -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);