mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-10 02:08:38 +09:00
Bug 1331444 - Keep iterators alive in Ion in for-of loops for IteratorClose due to exceptions
Issue #74
This commit is contained in:
parent
66bbc277f5
commit
082451c781
3 changed files with 22 additions and 6 deletions
|
|
@ -961,11 +961,16 @@ IonBuilder::processIterators()
|
|||
// Find phis that must directly hold an iterator live.
|
||||
Vector<MPhi*, 0, SystemAllocPolicy> worklist;
|
||||
for (size_t i = 0; i < iterators_.length(); i++) {
|
||||
MInstruction* ins = iterators_[i];
|
||||
for (MUseDefIterator iter(ins); iter; iter++) {
|
||||
if (iter.def()->isPhi()) {
|
||||
if (!worklist.append(iter.def()->toPhi()))
|
||||
return false;
|
||||
MDefinition* def = iterators_[i];
|
||||
if (def->isPhi()) {
|
||||
if (!worklist.append(def->toPhi()))
|
||||
return false;
|
||||
} else {
|
||||
for (MUseDefIterator iter(def); iter; iter++) {
|
||||
if (iter.def()->isPhi()) {
|
||||
if (!worklist.append(iter.def()->toPhi()))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1936,6 +1941,10 @@ IonBuilder::inspectOpcode(JSOp op)
|
|||
case JSOP_CALLITER:
|
||||
case JSOP_NEW:
|
||||
case JSOP_SUPERCALL:
|
||||
if (op == JSOP_CALLITER) {
|
||||
if (!outermostBuilder()->iterators_.append(current->peek(-1)))
|
||||
return false;
|
||||
}
|
||||
return jsop_call(GET_ARGC(pc), (JSOp)*pc == JSOP_NEW || (JSOp)*pc == JSOP_SUPERCALL);
|
||||
|
||||
case JSOP_EVAL:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue