diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e7fd14cf10589..191ef80d3211c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -5559,12 +5559,15 @@ namespace Parser { return parseFunctionBlock(SignatureFlags.IgnoreMissingOpenBrace | (isAsync ? SignatureFlags.Await : SignatureFlags.None)); } + const savedYieldContext = inYieldContext(); + setYieldContext(false); const savedTopLevel = topLevel; topLevel = false; const node = isAsync ? doInAwaitContext(() => parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction)) : doOutsideOfAwaitContext(() => parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction)); topLevel = savedTopLevel; + setYieldContext(savedYieldContext); return node; } diff --git a/tests/baselines/reference/YieldExpression20_es6.errors.txt b/tests/baselines/reference/YieldExpression20_es6.errors.txt new file mode 100644 index 0000000000000..4352abf7788d5 --- /dev/null +++ b/tests/baselines/reference/YieldExpression20_es6.errors.txt @@ -0,0 +1,12 @@ +YieldExpression20_es6.ts(3,8): error TS1163: A 'yield' expression is only allowed in a generator body. + + +==== YieldExpression20_es6.ts (1 errors) ==== + function* test() { + return () => ({ + b: yield 2, // error + ~~~~~ +!!! error TS1163: A 'yield' expression is only allowed in a generator body. + }); + } + \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression20_es6.js b/tests/baselines/reference/YieldExpression20_es6.js new file mode 100644 index 0000000000000..05ae6a9e79140 --- /dev/null +++ b/tests/baselines/reference/YieldExpression20_es6.js @@ -0,0 +1,16 @@ +//// [tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts] //// + +//// [YieldExpression20_es6.ts] +function* test() { + return () => ({ + b: yield 2, // error + }); +} + + +//// [YieldExpression20_es6.js] +function* test() { + return () => ({ + b: yield 2, // error + }); +} diff --git a/tests/baselines/reference/YieldExpression20_es6.symbols b/tests/baselines/reference/YieldExpression20_es6.symbols new file mode 100644 index 0000000000000..ee862d41ce543 --- /dev/null +++ b/tests/baselines/reference/YieldExpression20_es6.symbols @@ -0,0 +1,13 @@ +//// [tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts] //// + +=== YieldExpression20_es6.ts === +function* test() { +>test : Symbol(test, Decl(YieldExpression20_es6.ts, 0, 0)) + + return () => ({ + b: yield 2, // error +>b : Symbol(b, Decl(YieldExpression20_es6.ts, 1, 17)) + + }); +} + diff --git a/tests/baselines/reference/YieldExpression20_es6.types b/tests/baselines/reference/YieldExpression20_es6.types new file mode 100644 index 0000000000000..31d7c2553a7fe --- /dev/null +++ b/tests/baselines/reference/YieldExpression20_es6.types @@ -0,0 +1,26 @@ +//// [tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts] //// + +=== YieldExpression20_es6.ts === +function* test() { +>test : () => Generator { b: any; }, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + return () => ({ +>() => ({ b: yield 2, // error }) : () => { b: any; } +> : ^^^^^^^^^^^^^^^^^ +>({ b: yield 2, // error }) : { b: any; } +> : ^^^^^^^^^^^ +>{ b: yield 2, // error } : { b: any; } +> : ^^^^^^^^^^^ + + b: yield 2, // error +>b : any +> : ^^^ +>yield 2 : any +> : ^^^ +>2 : 2 +> : ^ + + }); +} + diff --git a/tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts b/tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts new file mode 100644 index 0000000000000..865c15f9c8518 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/YieldExpression20_es6.ts @@ -0,0 +1,7 @@ +// @target: es6 + +function* test() { + return () => ({ + b: yield 2, // error + }); +}