summaryrefslogtreecommitdiffstats
path: root/js/src/frontend/BytecodeEmitter.cpp
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-12-13 20:59:32 -0500
committerGaming4JC <g4jc@hyperbola.info>2019-12-17 06:25:25 -0500
commitd0d9a4f43dbd58c694c706b17996157fede20bdf (patch)
treedb9e4dce1b1c92b477720f1eba9a9ec04b3f8e2d /js/src/frontend/BytecodeEmitter.cpp
parent79b5eb14bc5f8495d20147957cda5f4e5fc8186a (diff)
downloadUXP-d0d9a4f43dbd58c694c706b17996157fede20bdf.tar
UXP-d0d9a4f43dbd58c694c706b17996157fede20bdf.tar.gz
UXP-d0d9a4f43dbd58c694c706b17996157fede20bdf.tar.lz
UXP-d0d9a4f43dbd58c694c706b17996157fede20bdf.tar.xz
UXP-d0d9a4f43dbd58c694c706b17996157fede20bdf.zip
Bug 1316098 - Optimize out result object allocation for await/return in async function.
Tag #1287
Diffstat (limited to 'js/src/frontend/BytecodeEmitter.cpp')
-rw-r--r--js/src/frontend/BytecodeEmitter.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp
index 77a480bff..a98016d63 100644
--- a/js/src/frontend/BytecodeEmitter.cpp
+++ b/js/src/frontend/BytecodeEmitter.cpp
@@ -8552,7 +8552,7 @@ bool
BytecodeEmitter::emitYield(ParseNode* pn)
{
MOZ_ASSERT(sc->isFunctionBox());
- MOZ_ASSERT(pn->getOp() == JSOP_YIELD || pn->getOp() == JSOP_AWAIT);
+ MOZ_ASSERT(pn->getOp() == JSOP_YIELD);
bool needsIteratorResult = sc->asFunctionBox()->needsIteratorResult();
if (needsIteratorResult) {
@@ -8574,13 +8574,28 @@ BytecodeEmitter::emitYield(ParseNode* pn)
if (!emitGetDotGenerator())
return false;
- if (!emitYieldOp(pn->getOp()))
+ if (!emitYieldOp(JSOP_YIELD))
return false;
return true;
}
bool
+BytecodeEmitter::emitAwait(ParseNode* pn)
+{
+ MOZ_ASSERT(sc->isFunctionBox());
+ MOZ_ASSERT(pn->getOp() == JSOP_AWAIT);
+
+ if (!emitTree(pn->pn_kid))
+ return false;
+ if (!emitGetDotGenerator())
+ return false;
+ if (!emitYieldOp(JSOP_AWAIT))
+ return false;
+ return true;
+}
+
+bool
BytecodeEmitter::emitYieldStar(ParseNode* iter)
{
MOZ_ASSERT(sc->isFunctionBox());
@@ -10630,11 +10645,15 @@ BytecodeEmitter::emitTree(ParseNode* pn, ValueUsage valueUsage /* = ValueUsage::
break;
case PNK_YIELD:
- case PNK_AWAIT:
if (!emitYield(pn))
return false;
break;
+ case PNK_AWAIT:
+ if (!emitAwait(pn))
+ return false;
+ break;
+
case PNK_STATEMENTLIST:
if (!emitStatementList(pn))
return false;