Bug 1185106 - Part 5.4: Support await expression in Reflect.parse. r=efaust,till
MozReview-Commit-ID: 7J8CeaYhP1X
--- a/js/src/builtin/ReflectParse.cpp
+++ b/js/src/builtin/ReflectParse.cpp
@@ -88,16 +88,17 @@ enum UnaryOperator {
UNOP_DELETE = 0,
UNOP_NEG,
UNOP_POS,
UNOP_NOT,
UNOP_BITNOT,
UNOP_TYPEOF,
UNOP_VOID,
+ UNOP_AWAIT,
UNOP_LIMIT
};
enum VarDeclKind {
VARDECL_ERR = -1,
VARDECL_VAR = 0,
VARDECL_CONST,
@@ -157,17 +158,18 @@ static const char* const binopNames[] =
static const char* const unopNames[] = {
"delete", /* UNOP_DELETE */
"-", /* UNOP_NEG */
"+", /* UNOP_POS */
"!", /* UNOP_NOT */
"~", /* UNOP_BITNOT */
"typeof", /* UNOP_TYPEOF */
- "void" /* UNOP_VOID */
+ "void", /* UNOP_VOID */
+ "await" /* UNOP_AWAIT */
};
static const char* const nodeTypeNames[] = {
#define ASTDEF(ast, str, method) str,
#include "jsast.tbl"
#undef ASTDEF
nullptr
};
@@ -1878,16 +1880,19 @@ UnaryOperator
ASTSerializer::unop(ParseNodeKind kind, JSOp op)
{
if (IsDeleteKind(kind))
return UNOP_DELETE;
if (IsTypeofKind(kind))
return UNOP_TYPEOF;
+ if (kind == PNK_AWAIT)
+ return UNOP_AWAIT;
+
switch (op) {
case JSOP_NEG:
return UNOP_NEG;
case JSOP_POS:
return UNOP_POS;
case JSOP_NOT:
return UNOP_NOT;
case JSOP_BITNOT:
@@ -2905,28 +2910,29 @@ ASTSerializer::expression(ParseNode* pn,
case PNK_BITOR:
case PNK_BITXOR:
case PNK_BITAND:
case PNK_IN:
case PNK_INSTANCEOF:
return leftAssociate(pn, dst);
case PNK_POW:
- return rightAssociate(pn, dst);
+ return rightAssociate(pn, dst);
case PNK_DELETENAME:
case PNK_DELETEPROP:
case PNK_DELETEELEM:
case PNK_DELETEEXPR:
case PNK_TYPEOFNAME:
case PNK_TYPEOFEXPR:
case PNK_VOID:
case PNK_NOT:
case PNK_BITNOT:
case PNK_POS:
+ case PNK_AWAIT:
case PNK_NEG: {
MOZ_ASSERT(pn->pn_pos.encloses(pn->pn_kid->pn_pos));
UnaryOperator op = unop(pn->getKind(), pn->getOp());
LOCAL_ASSERT(op > UNOP_ERR && op < UNOP_LIMIT);
RootedValue expr(cx);
return expression(pn->pn_kid, &expr) &&