From f47c9dba75cd9e47fbd33db27d10b95e7882af5d Mon Sep 17 00:00:00 2001 From: Cameron Kaiser Date: Sun, 16 Jun 2019 15:57:45 -0700 Subject: [PATCH] #541: hack for(const x in y) with test changes --- js/src/frontend/BytecodeEmitter.cpp | 4 ++-- js/src/frontend/Parser.cpp | 8 ++++++++ js/src/jit-test/tests/parser/letContextualKeyword.js | 6 +++--- .../LexicalEnvironment/const-declaration-in-for-loop.js | 6 ++++++ .../tests/js1_8_5/reflect-parse/for-loop-destructuring.js | 3 +++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index a816402c1..998e8027e 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -5502,7 +5502,7 @@ BytecodeEmitter::emitIterator() bool BytecodeEmitter::emitForInOrOfVariables(ParseNode* pn) { - MOZ_ASSERT(pn->isKind(PNK_VAR) || pn->isKind(PNK_LET)); + MOZ_ASSERT(pn->isKind(PNK_VAR) || pn->isKind(PNK_LET) || pn->isKind(PNK_CONST)); // ES6 specifies that loop variables get a fresh binding in each iteration. // This is currently implemented for C-style for(;;) loops, but not @@ -5524,7 +5524,7 @@ BytecodeEmitter::emitForInOrOfVariables(ParseNode* pn) if (!emitVariables(pn, DefineVars)) return false; } else { - MOZ_ASSERT(pn->isKind(PNK_LET)); + MOZ_ASSERT(pn->isKind(PNK_LET) || pn->isKind(PNK_CONST)); if (!emitVariables(pn, InitializeVars)) return false; } diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 5830e7d90..78852eff7 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -4581,12 +4581,15 @@ Parser::declarationPattern(Node decl, TokenKind tt, BindData::declarationName(Node decl, TokenKind tt, BindData