From 54188866406c266f15c9df3200216960d4d90932 Mon Sep 17 00:00:00 2001 From: Jason Orendorff Date: Thu, 20 Aug 2009 14:13:21 -0500 Subject: [PATCH] Bug 511418 - static-analysis error in jsobj.cpp:4257: cannot access JS_REQUIRES_STACK variable JSContext::fp and another trivial error in jstracer.cpp. r=gal. --HG-- extra : rebase_source : 9ee93b34fbf656437932a4f3c8b373a11911cffd --- js/src/jscntxt.cpp | 11 +++++++++++ js/src/jscntxt.h | 3 +++ js/src/jsobj.cpp | 2 +- js/src/jstracer.cpp | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/js/src/jscntxt.cpp b/js/src/jscntxt.cpp index ce93c37c36e..ebe54e086de 100644 --- a/js/src/jscntxt.cpp +++ b/js/src/jscntxt.cpp @@ -1850,3 +1850,14 @@ js_GetCurrentBytecodePC(JSContext* cx) */ return (*pc == JSOP_CALL && imacpc) ? imacpc : pc; } + +bool +js_CurrentPCIsInImacro(JSContext *cx) +{ +#ifdef JS_TRACER + VOUCH_DOES_NOT_REQUIRE_STACK(); + return (JS_ON_TRACE(cx) ? cx->bailExit->imacpc : cx->fp->imacpc) != NULL; +#else + return false; +#endif +} diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index 0a24cd140e0..3009774a7b0 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -1583,6 +1583,9 @@ js_GetScriptedCaller(JSContext *cx, JSStackFrame *fp); extern jsbytecode* js_GetCurrentBytecodePC(JSContext* cx); +extern bool +js_CurrentPCIsInImacro(JSContext *cx); + #ifdef JS_TRACER /* * Reconstruct the JS stack and clear cx->tracecx. We must be currently in a diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 58eb0787b5a..71ca5bf2013 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -4256,7 +4256,7 @@ js_GetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, JSBool cacheResult, } else { if (!JS_HAS_STRICT_OPTION(cx) || (op != JSOP_GETPROP && op != JSOP_GETELEM) || - cx->fp->imacpc) { + js_CurrentPCIsInImacro(cx)) { return JS_TRUE; } diff --git a/js/src/jstracer.cpp b/js/src/jstracer.cpp index 96ef1d6c7c4..6fe5e60e2ab 100644 --- a/js/src/jstracer.cpp +++ b/js/src/jstracer.cpp @@ -4007,7 +4007,7 @@ TypeMapLinkability(JSContext* cx, const TypeMap& typeMap, VMFragment* peer) return consensus; } -static unsigned +static JS_REQUIRES_STACK unsigned FindUndemotesInTypemaps(JSContext* cx, const TypeMap& typeMap, TreeInfo* treeInfo, Queue& undemotes) {