Bug 1444604: Part 4: Construct FramePtrs from AbstractFramePtrs. r=jorendorff

--HG--
extra : rebase_source : 27cb8cb393ad666b38b320d9920021de16b74593
extra : histedit_source : ba96218ef2580dc2491e66137b961246068aa8fa
This commit is contained in:
Jim Blandy 2018-03-15 16:14:31 -07:00
Родитель 8889589772
Коммит edecd0bbfd
2 изменённых файлов: 22 добавлений и 0 удалений

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

@ -998,6 +998,25 @@ LiveSavedFrameCache::FramePtr::create(const FrameIter& iter)
MOZ_CRASH("unexpected frame type");
}
/* static */ inline LiveSavedFrameCache::FramePtr
LiveSavedFrameCache::FramePtr::create(AbstractFramePtr afp)
{
MOZ_ASSERT(afp);
if (afp.isBaselineFrame()) {
js::jit::CommonFrameLayout *common = afp.asBaselineFrame()->framePrefix();
return FramePtr(common);
}
if (afp.isInterpreterFrame())
return FramePtr(afp.asInterpreterFrame());
if (afp.isWasmDebugFrame())
return FramePtr(afp.asWasmDebugFrame());
if (afp.isRematerializedFrame())
return FramePtr(afp.asRematerializedFrame());
MOZ_CRASH("unexpected frame type");
}
struct LiveSavedFrameCache::FramePtr::HasCachedMatcher {
template<typename Frame>
bool match(Frame* f) const { return f->hasCachedSavedFrame(); }

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

@ -1264,6 +1264,9 @@ class LiveSavedFrameCache
// for its frame. Otherwise, return Nothing.
static inline mozilla::Maybe<FramePtr> create(const FrameIter& iter);
// Construct a FramePtr from an AbstractFramePtr. This always succeeds.
static inline FramePtr create(AbstractFramePtr abstractFramePtr);
inline bool hasCachedSavedFrame() const;
inline void setHasCachedSavedFrame();