mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-29 16:29:19 -05:00
Transform setter bodies if they contain es2015 (#22931)
This commit is contained in:
@@ -1922,7 +1922,7 @@ namespace ts {
|
||||
return block;
|
||||
}
|
||||
|
||||
function visitFunctionBodyDownLevel(node: FunctionDeclaration | FunctionExpression) {
|
||||
function visitFunctionBodyDownLevel(node: FunctionDeclaration | FunctionExpression | AccessorDeclaration) {
|
||||
const updated = visitFunctionBody(node.body, functionBodyVisitor, context);
|
||||
return updateBlock(
|
||||
updated,
|
||||
@@ -3196,18 +3196,15 @@ namespace ts {
|
||||
convertedLoopState = undefined;
|
||||
const ancestorFacts = enterSubtree(HierarchyFacts.FunctionExcludes, HierarchyFacts.FunctionIncludes);
|
||||
let updated: AccessorDeclaration;
|
||||
if (node.transformFlags & TransformFlags.ContainsCapturedLexicalThis) {
|
||||
const parameters = visitParameterList(node.parameters, visitor, context);
|
||||
const body = transformFunctionBody(node);
|
||||
if (node.kind === SyntaxKind.GetAccessor) {
|
||||
updated = updateGetAccessor(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
|
||||
}
|
||||
else {
|
||||
updated = updateSetAccessor(node, node.decorators, node.modifiers, node.name, parameters, body);
|
||||
}
|
||||
const parameters = visitParameterList(node.parameters, visitor, context);
|
||||
const body = node.transformFlags & (TransformFlags.ContainsCapturedLexicalThis | TransformFlags.ContainsES2015)
|
||||
? transformFunctionBody(node)
|
||||
: visitFunctionBodyDownLevel(node);
|
||||
if (node.kind === SyntaxKind.GetAccessor) {
|
||||
updated = updateGetAccessor(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
|
||||
}
|
||||
else {
|
||||
updated = visitEachChild(node, visitor, context);
|
||||
updated = updateSetAccessor(node, node.decorators, node.modifiers, node.name, parameters, body);
|
||||
}
|
||||
exitSubtree(ancestorFacts, HierarchyFacts.PropagateNewTargetMask, HierarchyFacts.None);
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
//// [es5SetterparameterDestructuringNotElided.ts]
|
||||
const foo = {
|
||||
set foo([start, end]: [any, any]) {
|
||||
void start;
|
||||
void end;
|
||||
},
|
||||
};
|
||||
|
||||
//// [es5SetterparameterDestructuringNotElided.js]
|
||||
var foo = {
|
||||
set foo(_a) {
|
||||
var start = _a[0], end = _a[1];
|
||||
void start;
|
||||
void end;
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
=== tests/cases/compiler/es5SetterparameterDestructuringNotElided.ts ===
|
||||
const foo = {
|
||||
>foo : Symbol(foo, Decl(es5SetterparameterDestructuringNotElided.ts, 0, 5))
|
||||
|
||||
set foo([start, end]: [any, any]) {
|
||||
>foo : Symbol(foo, Decl(es5SetterparameterDestructuringNotElided.ts, 0, 13))
|
||||
>start : Symbol(start, Decl(es5SetterparameterDestructuringNotElided.ts, 1, 13))
|
||||
>end : Symbol(end, Decl(es5SetterparameterDestructuringNotElided.ts, 1, 19))
|
||||
|
||||
void start;
|
||||
>start : Symbol(start, Decl(es5SetterparameterDestructuringNotElided.ts, 1, 13))
|
||||
|
||||
void end;
|
||||
>end : Symbol(end, Decl(es5SetterparameterDestructuringNotElided.ts, 1, 19))
|
||||
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
=== tests/cases/compiler/es5SetterparameterDestructuringNotElided.ts ===
|
||||
const foo = {
|
||||
>foo : { foo: [any, any]; }
|
||||
>{ set foo([start, end]: [any, any]) { void start; void end; },} : { foo: [any, any]; }
|
||||
|
||||
set foo([start, end]: [any, any]) {
|
||||
>foo : [any, any]
|
||||
>start : any
|
||||
>end : any
|
||||
|
||||
void start;
|
||||
>void start : undefined
|
||||
>start : any
|
||||
|
||||
void end;
|
||||
>void end : undefined
|
||||
>end : any
|
||||
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
// @target: es5
|
||||
const foo = {
|
||||
set foo([start, end]: [any, any]) {
|
||||
void start;
|
||||
void end;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user