Bug 1432764 - Support Debug OSR with CacheIR_Regular ICs on stack r=jandem

MozReview-Commit-ID: 1ONbWxPpS4t

--HG--
extra : rebase_source : 30a107741d37fd4a49cf0701798266190fcceb82
This commit is contained in:
Ted Campbell 2018-02-08 16:20:18 -05:00
Родитель f004749d63
Коммит 4dadb65ad1
4 изменённых файлов: 38 добавлений и 0 удалений

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

@ -0,0 +1,16 @@
// |jit-test| error: uncaught exception
g = newGlobal();
g.parent = this;
g.eval(`
Debugger(parent).onExceptionUnwind = function(frame) { frame.older };
`);
var handler = {
has: function(tgt, key) { if (key == 'throw') { throw null; } }
};
var proxy = new Proxy({}, handler);
for (let k of ['foo', 'throw']) {
k in proxy;
}

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

@ -2343,6 +2343,24 @@ ICCacheIR_Updated::stubDataStart()
return reinterpret_cast<uint8_t*>(this) + stubInfo_->stubDataOffset();
}
/* static */ ICCacheIR_Regular*
ICCacheIR_Regular::Clone(JSContext* cx, ICStubSpace* space, ICStub* firstMonitorStub,
ICCacheIR_Regular& other)
{
const CacheIRStubInfo* stubInfo = other.stubInfo();
MOZ_ASSERT(stubInfo->makesGCCalls());
size_t bytesNeeded = stubInfo->stubDataOffset() + stubInfo->stubDataSize();
void* newStub = space->alloc(bytesNeeded);
if (!newStub)
return nullptr;
ICCacheIR_Regular* res = new(newStub) ICCacheIR_Regular(other.jitCode(), stubInfo);
stubInfo->copyStubData(&other, res);
return res;
}
/* static */ ICCacheIR_Monitored*
ICCacheIR_Monitored::Clone(JSContext* cx, ICStubSpace* space, ICStub* firstMonitorStub,
ICCacheIR_Monitored& other)

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

@ -695,6 +695,7 @@ RecompileBaselineScriptForDebugMode(JSContext* cx, JSScript* script,
#define PATCHABLE_ICSTUB_KIND_LIST(_) \
_(CacheIR_Monitored) \
_(CacheIR_Regular) \
_(CacheIR_Updated) \
_(Call_Scripted) \
_(Call_AnyScripted) \

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

@ -846,6 +846,9 @@ class ICCacheIR_Regular : public ICStub
stubInfo_(stubInfo)
{}
static ICCacheIR_Regular* Clone(JSContext* cx, ICStubSpace* space, ICStub* firstMonitorStub,
ICCacheIR_Regular& other);
void notePreliminaryObject() {
extra_ = 1;
}