зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1343481 - Part 4: Add Add GeneratorObject.{isAfterYield,isAfterAwait}. r=shu
This commit is contained in:
Родитель
c6a69a3c6c
Коммит
242fbfe0d7
|
@ -376,3 +376,34 @@ js::CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
GeneratorObject::isAfterYield()
|
||||
{
|
||||
return isAfterYieldOrAwait(JSOP_YIELD);
|
||||
}
|
||||
|
||||
bool
|
||||
GeneratorObject::isAfterAwait()
|
||||
{
|
||||
return isAfterYieldOrAwait(JSOP_AWAIT);
|
||||
}
|
||||
|
||||
bool
|
||||
GeneratorObject::isAfterYieldOrAwait(JSOp op)
|
||||
{
|
||||
if (isClosed() || isClosing() || isRunning())
|
||||
return false;
|
||||
|
||||
JSScript* script = callee().nonLazyScript();
|
||||
jsbytecode* code = script->code();
|
||||
uint32_t nextOffset = script->yieldAndAwaitOffsets()[yieldAndAwaitIndex()];
|
||||
if (code[nextOffset] != JSOP_DEBUGAFTERYIELD)
|
||||
return false;
|
||||
|
||||
uint32_t offset = nextOffset - JSOP_YIELD_LENGTH;
|
||||
MOZ_ASSERT(code[offset] == JSOP_INITIALYIELD || code[offset] == JSOP_YIELD ||
|
||||
code[offset] == JSOP_AWAIT);
|
||||
|
||||
return code[offset] == op;
|
||||
}
|
||||
|
|
|
@ -179,6 +179,13 @@ class GeneratorObject : public NativeObject
|
|||
setFixedSlot(NEWTARGET_SLOT, NullValue());
|
||||
}
|
||||
|
||||
bool isAfterYield();
|
||||
bool isAfterAwait();
|
||||
|
||||
private:
|
||||
bool isAfterYieldOrAwait(JSOp op);
|
||||
|
||||
public:
|
||||
static size_t offsetOfCalleeSlot() {
|
||||
return getFixedSlotOffset(CALLEE_SLOT);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче