Bug 1595533 - Part 2: Use JSOP_UNPICK for inc/dec in PropOpEmitter.cpp. r=arai

Depends on D52549

Differential Revision: https://phabricator.services.mozilla.com/D52554

--HG--
extra : moz-landing-system : lando
This commit is contained in:
André Bargull 2019-11-11 20:32:11 +00:00
parent 366e47a9f9
commit f00e7769c3

View File

@ -218,46 +218,20 @@ bool PropOpEmitter::emitIncDec(JSAtom* prop) {
return false;
}
if (isPostIncDec()) {
// [stack] OBJ SUPERBASE? N
if (!bce_->emit1(JSOP_DUP)) {
// [stack] .. N N
return false;
}
if (!bce_->emit2(JSOP_UNPICK, 2 + isSuper())) {
// [stack] N OBJ SUPERBASE? N
return false;
}
}
if (!bce_->emit1(incOp)) {
// [stack] ... N? N+1
// [stack] ... N+1
return false;
}
if (isPostIncDec()) {
if (isSuper()) {
// [stack] THIS OBJ N N+1
if (!bce_->emit2(JSOP_PICK, 3)) {
// [stack] OBJ N N+1 THIS
return false;
}
if (!bce_->emit1(JSOP_SWAP)) {
// [stack] OBJ N THIS N+1
return false;
}
if (!bce_->emit2(JSOP_PICK, 3)) {
// [stack] N THIS N+1 OBJ
return false;
}
if (!bce_->emit1(JSOP_SWAP)) {
// [stack] N THIS OBJ N+1
return false;
}
} else {
// [stack] OBJ N N+1
if (!bce_->emit2(JSOP_PICK, 2)) {
// [stack] N N+1 OBJ
return false;
}
if (!bce_->emit1(JSOP_SWAP)) {
// [stack] N OBJ N+1
return false;
}
}
}
JSOp setOp =
isSuper()