diff --git a/jerry-core/parser/js/js-parser-statm.c b/jerry-core/parser/js/js-parser-statm.c
index c2a4259cd6..6f20e499ac 100644
--- a/jerry-core/parser/js/js-parser-statm.c
+++ b/jerry-core/parser/js/js-parser-statm.c
@@ -600,7 +600,9 @@ parser_parse_function_statement (parser_context_t *context_p) /**< context */
JERRY_ASSERT (context_p->token.type == LEXER_KEYW_FUNCTION);
#if JERRY_ESNEXT
- if (JERRY_UNLIKELY (parser_statement_flags[context_p->stack_top_uint8] & PARSER_STATM_SINGLE_STATM))
+ bool is_single_statement = (parser_statement_flags[context_p->stack_top_uint8] & PARSER_STATM_SINGLE_STATM) != 0;
+
+ if (JERRY_UNLIKELY (is_single_statement))
{
if (context_p->status_flags & PARSER_IS_STRICT)
{
@@ -667,6 +669,10 @@ parser_parse_function_statement (parser_context_t *context_p) /**< context */
if (lexer_consume_generator (context_p))
{
+ if (is_single_statement)
+ {
+ parser_raise_error (context_p, PARSER_ERR_GENERATOR_IN_SINGLE_STATEMENT_POS);
+ }
is_generator_function = true;
}
#endif /* JERRY_ESNEXT */
diff --git a/jerry-core/parser/js/js-parser-util.c b/jerry-core/parser/js/js-parser-util.c
index 8a65dae4ac..66a6356219 100644
--- a/jerry-core/parser/js/js-parser-util.c
+++ b/jerry-core/parser/js/js-parser-util.c
@@ -1243,6 +1243,10 @@ parser_error_to_string (parser_error_t error) /**< error code */
{
return "Lexical declaration cannot appear in a single-statement context";
}
+ case PARSER_ERR_GENERATOR_IN_SINGLE_STATEMENT_POS:
+ {
+ return "Generator function cannot appear in a single-statement context";
+ }
case PARSER_ERR_LABELLED_FUNC_NOT_IN_BLOCK:
{
return "Labelled functions are only allowed inside blocks";
diff --git a/jerry-core/parser/js/js-parser.h b/jerry-core/parser/js/js-parser.h
index 6274cb5fc8..6f1bfb8968 100644
--- a/jerry-core/parser/js/js-parser.h
+++ b/jerry-core/parser/js/js-parser.h
@@ -141,6 +141,7 @@ typedef enum
#if JERRY_ESNEXT
PARSER_ERR_VARIABLE_REDECLARED, /**< a variable redeclared */
PARSER_ERR_LEXICAL_SINGLE_STATEMENT, /**< lexical declaration in single statement context */
+ PARSER_ERR_GENERATOR_IN_SINGLE_STATEMENT_POS, /**< generator func not allowed in single statement position */
PARSER_ERR_LABELLED_FUNC_NOT_IN_BLOCK, /**< labelled functions are only allowed inside blocks */
PARSER_ERR_LEXICAL_LET_BINDING, /**< let binding cannot be declared in let/const */
PARSER_ERR_MISSING_ASSIGN_AFTER_CONST, /**< an assignment is required after a const declaration */
diff --git a/tests/jerry/es.next/generator-function-in-single-statement.js b/tests/jerry/es.next/generator-function-in-single-statement.js
new file mode 100644
index 0000000000..44aa7bdf44
--- /dev/null
+++ b/tests/jerry/es.next/generator-function-in-single-statement.js
@@ -0,0 +1,27 @@
+/* Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+function parse(txt) {
+ try {
+ eval(txt)
+ assert(false)
+ } catch (e) {
+ assert(e instanceof SyntaxError)
+ }
+}
+
+parse("if (true) function* g() { }")
+parse("if (false) ; else function* g() { }")
diff --git a/tests/test262-esnext-excludelist.xml b/tests/test262-esnext-excludelist.xml
index 5822d88491..00f28d23e9 100644
--- a/tests/test262-esnext-excludelist.xml
+++ b/tests/test262-esnext-excludelist.xml
@@ -365,13 +365,8 @@
-
-
-
-
-