Transform setter bodies if they contain es2015 (#22931)

This commit is contained in:
Wesley Wigham
2018-03-27 15:16:56 -07:00
committed by GitHub
parent 6ef4d7774a
commit 1db769d566
5 changed files with 68 additions and 11 deletions

View File

@@ -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;

View File

@@ -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;
},
};

View File

@@ -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))
},
};

View File

@@ -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
},
};

View File

@@ -0,0 +1,7 @@
// @target: es5
const foo = {
set foo([start, end]: [any, any]) {
void start;
void end;
},
};