Bug 1026188 - Allow embedders to save JS execution stacks. r=sfink

This commit is contained in:
Nick Fitzgerald 2014-06-25 12:21:00 -04:00
parent c9e5e16fc1
commit ed7a44d51b
3 changed files with 18 additions and 3 deletions

View File

@ -880,10 +880,10 @@ static bool
SaveStack(JSContext *cx, unsigned argc, jsval *vp) SaveStack(JSContext *cx, unsigned argc, jsval *vp)
{ {
CallArgs args = CallArgsFromVp(argc, vp); CallArgs args = CallArgsFromVp(argc, vp);
Rooted<SavedFrame*> frame(cx); Rooted<JSObject*> stack(cx);
if (!cx->compartment()->savedStacks().saveCurrentStack(cx, &frame)) if (!JS::CaptureCurrentStack(cx, &stack))
return false; return false;
args.rval().setObject(*frame.get()); args.rval().setObject(*stack);
return true; return true;
} }

View File

@ -73,6 +73,7 @@
#include "vm/NumericConversions.h" #include "vm/NumericConversions.h"
#include "vm/RegExpStatics.h" #include "vm/RegExpStatics.h"
#include "vm/Runtime.h" #include "vm/Runtime.h"
#include "vm/SavedStacks.h"
#include "vm/Shape.h" #include "vm/Shape.h"
#include "vm/SharedArrayObject.h" #include "vm/SharedArrayObject.h"
#include "vm/StopIterationObject.h" #include "vm/StopIterationObject.h"
@ -6559,3 +6560,14 @@ JS::SetOutOfMemoryCallback(JSRuntime *rt, OutOfMemoryCallback cb, void *data)
rt->oomCallbackData = data; rt->oomCallbackData = data;
} }
JS_PUBLIC_API(bool)
JS::CaptureCurrentStack(JSContext *cx, JS::MutableHandleObject stackp)
{
JSCompartment *compartment = cx->compartment();
JS_ASSERT(compartment);
Rooted<SavedFrame *> frame(cx);
if (!compartment->savedStacks().saveCurrentStack(cx, &frame))
return false;
stackp.set(frame.get());
return true;
}

View File

@ -5164,6 +5164,9 @@ typedef void
extern JS_PUBLIC_API(void) extern JS_PUBLIC_API(void)
SetOutOfMemoryCallback(JSRuntime *rt, OutOfMemoryCallback cb, void *data); SetOutOfMemoryCallback(JSRuntime *rt, OutOfMemoryCallback cb, void *data);
extern JS_PUBLIC_API(bool)
CaptureCurrentStack(JSContext *cx, MutableHandleObject stackp);
} /* namespace JS */ } /* namespace JS */
#endif /* jsapi_h */ #endif /* jsapi_h */