This commit is contained in:
Robert Sayre 2010-03-31 15:24:16 -07:00
Родитель 9c17619328 2cb53b9348
Коммит 80b07733e2
3 изменённых файлов: 1 добавлений и 47 удалений

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

@ -1160,15 +1160,6 @@ typedef struct JSResolvingEntry {
extern const JSDebugHooks js_NullDebugHooks; /* defined in jsdbgapi.cpp */
/*
* Wraps a stack frame which has been temporarily popped from its call stack
* and needs to be GC-reachable. See JSContext::{push,pop}GCReachableFrame.
*/
struct JSGCReachableFrame {
JSGCReachableFrame *next;
JSStackFrame *frame;
};
namespace js {
class AutoGCRooter;
}
@ -1291,19 +1282,6 @@ struct JSContext
void *data;
void *data2;
/* Linked list of frames temporarily popped from their chain. */
JSGCReachableFrame *reachableFrames;
void pushGCReachableFrame(JSGCReachableFrame &gcrf, JSStackFrame *f) {
gcrf.next = reachableFrames;
gcrf.frame = f;
reachableFrames = &gcrf;
}
void popGCReachableFrame() {
reachableFrames = reachableFrames->next;
}
private:
#ifdef __GNUC__
# pragma GCC visibility push(default)

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

@ -1227,29 +1227,9 @@ JS_GetFrameCallObject(JSContext *cx, JSStackFrame *fp)
JS_PUBLIC_API(JSObject *)
JS_GetFrameThis(JSContext *cx, JSStackFrame *fp)
{
if (fp->flags & JSFRAME_COMPUTED_THIS)
return JSVAL_TO_OBJECT(fp->thisv); /* JSVAL_COMPUTED_THIS invariant */
/* js_ComputeThis gets confused if fp != cx->fp, so set it aside. */
JSStackFrame *afp = js_GetTopStackFrame(cx);
JSGCReachableFrame reachable;
if (afp != fp) {
if (afp) {
cx->fp = fp;
cx->pushGCReachableFrame(reachable, afp);
}
} else {
afp = NULL;
}
if (fp->argv)
if (!(fp->flags & JSFRAME_COMPUTED_THIS) && fp->argv)
fp->thisv = OBJECT_TO_JSVAL(js_ComputeThis(cx, fp->argv));
if (afp) {
cx->fp = afp;
cx->popGCReachableFrame();
}
return JSVAL_TO_OBJECT(fp->thisv);
}

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

@ -2412,10 +2412,6 @@ js_TraceContext(JSTracer *trc, JSContext *acx)
}
}
/* Trace frames that have been temporarily removed but need to be marked. */
for (JSGCReachableFrame *rf = acx->reachableFrames; rf; rf = rf->next)
TraceFrameChain(trc, rf->frame);
/* Mark other roots-by-definition in acx. */
if (acx->globalObject && !JS_HAS_OPTION(acx, JSOPTION_UNROOTED_GLOBAL))
JS_CALL_OBJECT_TRACER(trc, acx->globalObject, "global object");