diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /js/src/vm/Debugger-inl.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | uxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz |
Add m-esr52 at 52.6.0
Diffstat (limited to 'js/src/vm/Debugger-inl.h')
-rw-r--r-- | js/src/vm/Debugger-inl.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/js/src/vm/Debugger-inl.h b/js/src/vm/Debugger-inl.h new file mode 100644 index 0000000000..e973975d24 --- /dev/null +++ b/js/src/vm/Debugger-inl.h @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef vm_Debugger_inl_h +#define vm_Debugger_inl_h + +#include "vm/Debugger.h" + +#include "vm/Stack-inl.h" + +/* static */ inline bool +js::Debugger::onLeaveFrame(JSContext* cx, AbstractFramePtr frame, jsbytecode* pc, bool ok) +{ + MOZ_ASSERT_IF(frame.isInterpreterFrame(), frame.asInterpreterFrame() == cx->interpreterFrame()); + MOZ_ASSERT_IF(frame.script()->isDebuggee(), frame.isDebuggee()); + /* Traps must be cleared from eval frames, see slowPathOnLeaveFrame. */ + mozilla::DebugOnly<bool> evalTraps = frame.isEvalFrame() && + frame.script()->hasAnyBreakpointsOrStepMode(); + MOZ_ASSERT_IF(evalTraps, frame.isDebuggee()); + if (frame.isDebuggee()) + ok = slowPathOnLeaveFrame(cx, frame, pc, ok); + MOZ_ASSERT(!inFrameMaps(frame)); + return ok; +} + +/* static */ inline js::Debugger* +js::Debugger::fromJSObject(const JSObject* obj) +{ + MOZ_ASSERT(js::GetObjectClass(obj) == &class_); + return (Debugger*) obj->as<NativeObject>().getPrivate(); +} + +/* static */ inline bool +js::Debugger::checkNoExecute(JSContext* cx, HandleScript script) +{ + if (!cx->compartment()->isDebuggee() || !cx->runtime()->noExecuteDebuggerTop) + return true; + return slowPathCheckNoExecute(cx, script); +} + +/* static */ JSTrapStatus +js::Debugger::onEnterFrame(JSContext* cx, AbstractFramePtr frame) +{ + MOZ_ASSERT_IF(frame.script()->isDebuggee(), frame.isDebuggee()); + if (!frame.isDebuggee()) + return JSTRAP_CONTINUE; + return slowPathOnEnterFrame(cx, frame); +} + +/* static */ JSTrapStatus +js::Debugger::onDebuggerStatement(JSContext* cx, AbstractFramePtr frame) +{ + if (!cx->compartment()->isDebuggee()) + return JSTRAP_CONTINUE; + return slowPathOnDebuggerStatement(cx, frame); +} + +/* static */ JSTrapStatus +js::Debugger::onExceptionUnwind(JSContext* cx, AbstractFramePtr frame) +{ + if (!cx->compartment()->isDebuggee()) + return JSTRAP_CONTINUE; + return slowPathOnExceptionUnwind(cx, frame); +} + +/* static */ void +js::Debugger::onNewWasmInstance(JSContext* cx, Handle<WasmInstanceObject*> wasmInstance) +{ + if (cx->compartment()->isDebuggee()) + slowPathOnNewWasmInstance(cx, wasmInstance); +} + +inline bool +js::Debugger::getScriptFrame(JSContext* cx, const ScriptFrameIter& iter, + MutableHandle<DebuggerFrame*> result) +{ + return getScriptFrameWithIter(cx, iter.abstractFramePtr(), &iter, result); +} + +inline js::Debugger* +js::DebuggerEnvironment::owner() const +{ + JSObject* dbgobj = &getReservedSlot(OWNER_SLOT).toObject(); + return Debugger::fromJSObject(dbgobj); +} + +inline js::Debugger* +js::DebuggerFrame::owner() const +{ + JSObject* dbgobj = &getReservedSlot(OWNER_SLOT).toObject(); + return Debugger::fromJSObject(dbgobj); +} + +inline js::Debugger* +js::DebuggerObject::owner() const +{ + JSObject* dbgobj = &getReservedSlot(OWNER_SLOT).toObject(); + return Debugger::fromJSObject(dbgobj); +} + +inline js::PromiseObject* +js::DebuggerObject::promise() const +{ + MOZ_ASSERT(isPromise()); + + JSObject* referent = this->referent(); + if (IsCrossCompartmentWrapper(referent)) { + referent = CheckedUnwrap(referent); + MOZ_ASSERT(referent); + } + + return &referent->as<PromiseObject>(); +} + +#endif /* vm_Debugger_inl_h */ |