Bug 1445973: Part 3: Add FramePtr::clearHasCachedSavedFrame method. r=jorendorff

This entails implementing corresponding methods on each variant of
FramePtr::Ptr.

--HG--
extra : rebase_source : 3b810cd4d3aa78d014f830acbf2d6e6794694415
extra : source : 014fdec944a9e82fd74e7ff4644cb4f9e96076c2
This commit is contained in:
Jim Blandy 2018-03-29 19:35:22 -07:00
Родитель 8490101998
Коммит 9c7842a01d
5 изменённых файлов: 23 добавлений и 0 удалений

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

@ -374,6 +374,9 @@ class CommonFrameLayout
void setHasCachedSavedFrame() {
descriptor_ |= HASCACHEDSAVEDFRAME_BIT;
}
void clearHasCachedSavedFrame() {
descriptor_ &= ~HASCACHEDSAVEDFRAME_BIT;
}
uint8_t* returnAddress() const {
return returnAddress_;
}

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

@ -190,6 +190,10 @@ class RematerializedFrame
hasCachedSavedFrame_ = true;
}
void clearHasCachedSavedFrame() {
hasCachedSavedFrame_ = false;
}
unsigned numFormalArgs() const {
return isFunctionFrame() ? callee()->nargs() : 0;
}

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

@ -1037,6 +1037,16 @@ LiveSavedFrameCache::FramePtr::setHasCachedSavedFrame() {
ptr.match(SetHasCachedMatcher());
}
struct LiveSavedFrameCache::FramePtr::ClearHasCachedMatcher {
template<typename Frame>
void match(Frame* f) { f->clearHasCachedSavedFrame(); }
};
inline void
LiveSavedFrameCache::FramePtr::clearHasCachedSavedFrame() {
ptr.match(ClearHasCachedMatcher());
}
} /* namespace js */
#endif /* vm_Stack_inl_h */

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

@ -777,6 +777,9 @@ class InterpreterFrame
void setHasCachedSavedFrame() {
flags_ |= HAS_CACHED_SAVED_FRAME;
}
void clearHasCachedSavedFrame() {
flags_ &= ~HAS_CACHED_SAVED_FRAME;
}
public:
void trace(JSTracer* trc, Value* sp, jsbytecode* pc);
@ -1248,6 +1251,7 @@ class LiveSavedFrameCache
struct HasCachedMatcher;
struct SetHasCachedMatcher;
struct ClearHasCachedMatcher;
public:
// If iter's frame is of a type that can be cached, construct a FramePtr
@ -1259,6 +1263,7 @@ class LiveSavedFrameCache
inline bool hasCachedSavedFrame() const;
inline void setHasCachedSavedFrame();
inline void clearHasCachedSavedFrame();
// Return true if this FramePtr refers to an interpreter frame.
inline bool isInterpreterFrame() const { return ptr.is<InterpreterFrame*>(); }

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

@ -2011,6 +2011,7 @@ class DebugFrame
bool hasCachedSavedFrame() const { return hasCachedSavedFrame_; }
void setHasCachedSavedFrame() { hasCachedSavedFrame_ = true; }
void clearHasCachedSavedFrame() { hasCachedSavedFrame_ = false; }
// DebugFrame is accessed directly by JIT code.