mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Update LKG
This commit is contained in:
+38
-7
@@ -26701,15 +26701,29 @@ var ts;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function getNonGenericSignature(type) {
|
||||
function getNonGenericSignature(type, node) {
|
||||
var signatures = getSignaturesOfStructuredType(type, 0);
|
||||
if (signatures.length === 1) {
|
||||
var signature = signatures[0];
|
||||
if (!signature.typeParameters) {
|
||||
if (!signature.typeParameters && !isAritySmaller(signature, node)) {
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
function isAritySmaller(signature, target) {
|
||||
var targetParameterCount = 0;
|
||||
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
|
||||
var param = target.parameters[targetParameterCount];
|
||||
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
|
||||
targetParameterCount--;
|
||||
}
|
||||
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
|
||||
return sourceLength < targetParameterCount;
|
||||
}
|
||||
function isFunctionExpressionOrArrowFunction(node) {
|
||||
return node.kind === 180 || node.kind === 181;
|
||||
}
|
||||
@@ -26730,13 +26744,13 @@ var ts;
|
||||
return undefined;
|
||||
}
|
||||
if (!(type.flags & 65536)) {
|
||||
return getNonGenericSignature(type);
|
||||
return getNonGenericSignature(type, node);
|
||||
}
|
||||
var signatureList;
|
||||
var types = type.types;
|
||||
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
||||
var current = types_14[_i];
|
||||
var signature = getNonGenericSignature(current);
|
||||
var signature = getNonGenericSignature(current, node);
|
||||
if (signature) {
|
||||
if (!signatureList) {
|
||||
signatureList = [signature];
|
||||
@@ -39406,6 +39420,7 @@ var ts;
|
||||
var enclosingFunction;
|
||||
var enclosingNonArrowFunction;
|
||||
var enclosingNonAsyncFunctionBody;
|
||||
var isInConstructorWithCapturedSuper;
|
||||
var convertedLoopState;
|
||||
var enabledSubstitutions;
|
||||
return transformSourceFile;
|
||||
@@ -39435,11 +39450,14 @@ var ts;
|
||||
var savedCurrentParent = currentParent;
|
||||
var savedCurrentNode = currentNode;
|
||||
var savedConvertedLoopState = convertedLoopState;
|
||||
var savedIsInConstructorWithCapturedSuper = isInConstructorWithCapturedSuper;
|
||||
if (ts.nodeStartsNewLexicalEnvironment(node)) {
|
||||
isInConstructorWithCapturedSuper = false;
|
||||
convertedLoopState = undefined;
|
||||
}
|
||||
onBeforeVisitNode(node);
|
||||
var visited = f(node);
|
||||
isInConstructorWithCapturedSuper = savedIsInConstructorWithCapturedSuper;
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
enclosingFunction = savedEnclosingFunction;
|
||||
enclosingNonArrowFunction = savedEnclosingNonArrowFunction;
|
||||
@@ -39451,16 +39469,25 @@ var ts;
|
||||
currentNode = savedCurrentNode;
|
||||
return visited;
|
||||
}
|
||||
function returnCapturedThis(node) {
|
||||
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
|
||||
}
|
||||
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
||||
return isInConstructorWithCapturedSuper && node.kind === 212 && !node.expression;
|
||||
}
|
||||
function shouldCheckNode(node) {
|
||||
return (node.transformFlags & 256) !== 0 ||
|
||||
node.kind === 215 ||
|
||||
(ts.isIterationStatement(node, false) && shouldConvertIterationStatementBody(node));
|
||||
}
|
||||
function visitorWorker(node) {
|
||||
if (shouldCheckNode(node)) {
|
||||
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
||||
return returnCapturedThis(node);
|
||||
}
|
||||
else if (shouldCheckNode(node)) {
|
||||
return visitJavaScript(node);
|
||||
}
|
||||
else if (node.transformFlags & 512) {
|
||||
else if (node.transformFlags & 512 || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
|
||||
return ts.visitEachChild(node, visitor, context);
|
||||
}
|
||||
else {
|
||||
@@ -39480,6 +39507,7 @@ var ts;
|
||||
function visitNodesInConvertedLoop(node) {
|
||||
switch (node.kind) {
|
||||
case 212:
|
||||
node = isReturnVoidStatementInConstructorWithCapturedSuper(node) ? returnCapturedThis(node) : node;
|
||||
return visitReturnStatement(node);
|
||||
case 201:
|
||||
return visitVariableStatement(node);
|
||||
@@ -39794,7 +39822,10 @@ var ts;
|
||||
statementOffset++;
|
||||
}
|
||||
if (constructor) {
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) { return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset); });
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) {
|
||||
isInConstructorWithCapturedSuper = superCaptureStatus === 1;
|
||||
return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset);
|
||||
});
|
||||
ts.addRange(statements, body);
|
||||
}
|
||||
if (extendsClauseElement
|
||||
|
||||
+38
-7
@@ -28206,15 +28206,29 @@ var ts;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function getNonGenericSignature(type) {
|
||||
function getNonGenericSignature(type, node) {
|
||||
var signatures = getSignaturesOfStructuredType(type, 0);
|
||||
if (signatures.length === 1) {
|
||||
var signature = signatures[0];
|
||||
if (!signature.typeParameters) {
|
||||
if (!signature.typeParameters && !isAritySmaller(signature, node)) {
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
function isAritySmaller(signature, target) {
|
||||
var targetParameterCount = 0;
|
||||
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
|
||||
var param = target.parameters[targetParameterCount];
|
||||
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
|
||||
targetParameterCount--;
|
||||
}
|
||||
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
|
||||
return sourceLength < targetParameterCount;
|
||||
}
|
||||
function isFunctionExpressionOrArrowFunction(node) {
|
||||
return node.kind === 180 || node.kind === 181;
|
||||
}
|
||||
@@ -28235,13 +28249,13 @@ var ts;
|
||||
return undefined;
|
||||
}
|
||||
if (!(type.flags & 65536)) {
|
||||
return getNonGenericSignature(type);
|
||||
return getNonGenericSignature(type, node);
|
||||
}
|
||||
var signatureList;
|
||||
var types = type.types;
|
||||
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
||||
var current = types_14[_i];
|
||||
var signature = getNonGenericSignature(current);
|
||||
var signature = getNonGenericSignature(current, node);
|
||||
if (signature) {
|
||||
if (!signatureList) {
|
||||
signatureList = [signature];
|
||||
@@ -39525,6 +39539,7 @@ var ts;
|
||||
var enclosingFunction;
|
||||
var enclosingNonArrowFunction;
|
||||
var enclosingNonAsyncFunctionBody;
|
||||
var isInConstructorWithCapturedSuper;
|
||||
var convertedLoopState;
|
||||
var enabledSubstitutions;
|
||||
return transformSourceFile;
|
||||
@@ -39554,11 +39569,14 @@ var ts;
|
||||
var savedCurrentParent = currentParent;
|
||||
var savedCurrentNode = currentNode;
|
||||
var savedConvertedLoopState = convertedLoopState;
|
||||
var savedIsInConstructorWithCapturedSuper = isInConstructorWithCapturedSuper;
|
||||
if (ts.nodeStartsNewLexicalEnvironment(node)) {
|
||||
isInConstructorWithCapturedSuper = false;
|
||||
convertedLoopState = undefined;
|
||||
}
|
||||
onBeforeVisitNode(node);
|
||||
var visited = f(node);
|
||||
isInConstructorWithCapturedSuper = savedIsInConstructorWithCapturedSuper;
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
enclosingFunction = savedEnclosingFunction;
|
||||
enclosingNonArrowFunction = savedEnclosingNonArrowFunction;
|
||||
@@ -39570,16 +39588,25 @@ var ts;
|
||||
currentNode = savedCurrentNode;
|
||||
return visited;
|
||||
}
|
||||
function returnCapturedThis(node) {
|
||||
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
|
||||
}
|
||||
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
||||
return isInConstructorWithCapturedSuper && node.kind === 212 && !node.expression;
|
||||
}
|
||||
function shouldCheckNode(node) {
|
||||
return (node.transformFlags & 256) !== 0 ||
|
||||
node.kind === 215 ||
|
||||
(ts.isIterationStatement(node, false) && shouldConvertIterationStatementBody(node));
|
||||
}
|
||||
function visitorWorker(node) {
|
||||
if (shouldCheckNode(node)) {
|
||||
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
||||
return returnCapturedThis(node);
|
||||
}
|
||||
else if (shouldCheckNode(node)) {
|
||||
return visitJavaScript(node);
|
||||
}
|
||||
else if (node.transformFlags & 512) {
|
||||
else if (node.transformFlags & 512 || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
|
||||
return ts.visitEachChild(node, visitor, context);
|
||||
}
|
||||
else {
|
||||
@@ -39599,6 +39626,7 @@ var ts;
|
||||
function visitNodesInConvertedLoop(node) {
|
||||
switch (node.kind) {
|
||||
case 212:
|
||||
node = isReturnVoidStatementInConstructorWithCapturedSuper(node) ? returnCapturedThis(node) : node;
|
||||
return visitReturnStatement(node);
|
||||
case 201:
|
||||
return visitVariableStatement(node);
|
||||
@@ -39913,7 +39941,10 @@ var ts;
|
||||
statementOffset++;
|
||||
}
|
||||
if (constructor) {
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) { return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset); });
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) {
|
||||
isInConstructorWithCapturedSuper = superCaptureStatus === 1;
|
||||
return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset);
|
||||
});
|
||||
ts.addRange(statements, body);
|
||||
}
|
||||
if (extendsClauseElement
|
||||
|
||||
+38
-7
@@ -28206,15 +28206,29 @@ var ts;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function getNonGenericSignature(type) {
|
||||
function getNonGenericSignature(type, node) {
|
||||
var signatures = getSignaturesOfStructuredType(type, 0);
|
||||
if (signatures.length === 1) {
|
||||
var signature = signatures[0];
|
||||
if (!signature.typeParameters) {
|
||||
if (!signature.typeParameters && !isAritySmaller(signature, node)) {
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
function isAritySmaller(signature, target) {
|
||||
var targetParameterCount = 0;
|
||||
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
|
||||
var param = target.parameters[targetParameterCount];
|
||||
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
|
||||
targetParameterCount--;
|
||||
}
|
||||
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
|
||||
return sourceLength < targetParameterCount;
|
||||
}
|
||||
function isFunctionExpressionOrArrowFunction(node) {
|
||||
return node.kind === 180 || node.kind === 181;
|
||||
}
|
||||
@@ -28235,13 +28249,13 @@ var ts;
|
||||
return undefined;
|
||||
}
|
||||
if (!(type.flags & 65536)) {
|
||||
return getNonGenericSignature(type);
|
||||
return getNonGenericSignature(type, node);
|
||||
}
|
||||
var signatureList;
|
||||
var types = type.types;
|
||||
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
||||
var current = types_14[_i];
|
||||
var signature = getNonGenericSignature(current);
|
||||
var signature = getNonGenericSignature(current, node);
|
||||
if (signature) {
|
||||
if (!signatureList) {
|
||||
signatureList = [signature];
|
||||
@@ -39525,6 +39539,7 @@ var ts;
|
||||
var enclosingFunction;
|
||||
var enclosingNonArrowFunction;
|
||||
var enclosingNonAsyncFunctionBody;
|
||||
var isInConstructorWithCapturedSuper;
|
||||
var convertedLoopState;
|
||||
var enabledSubstitutions;
|
||||
return transformSourceFile;
|
||||
@@ -39554,11 +39569,14 @@ var ts;
|
||||
var savedCurrentParent = currentParent;
|
||||
var savedCurrentNode = currentNode;
|
||||
var savedConvertedLoopState = convertedLoopState;
|
||||
var savedIsInConstructorWithCapturedSuper = isInConstructorWithCapturedSuper;
|
||||
if (ts.nodeStartsNewLexicalEnvironment(node)) {
|
||||
isInConstructorWithCapturedSuper = false;
|
||||
convertedLoopState = undefined;
|
||||
}
|
||||
onBeforeVisitNode(node);
|
||||
var visited = f(node);
|
||||
isInConstructorWithCapturedSuper = savedIsInConstructorWithCapturedSuper;
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
enclosingFunction = savedEnclosingFunction;
|
||||
enclosingNonArrowFunction = savedEnclosingNonArrowFunction;
|
||||
@@ -39570,16 +39588,25 @@ var ts;
|
||||
currentNode = savedCurrentNode;
|
||||
return visited;
|
||||
}
|
||||
function returnCapturedThis(node) {
|
||||
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
|
||||
}
|
||||
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
||||
return isInConstructorWithCapturedSuper && node.kind === 212 && !node.expression;
|
||||
}
|
||||
function shouldCheckNode(node) {
|
||||
return (node.transformFlags & 256) !== 0 ||
|
||||
node.kind === 215 ||
|
||||
(ts.isIterationStatement(node, false) && shouldConvertIterationStatementBody(node));
|
||||
}
|
||||
function visitorWorker(node) {
|
||||
if (shouldCheckNode(node)) {
|
||||
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
||||
return returnCapturedThis(node);
|
||||
}
|
||||
else if (shouldCheckNode(node)) {
|
||||
return visitJavaScript(node);
|
||||
}
|
||||
else if (node.transformFlags & 512) {
|
||||
else if (node.transformFlags & 512 || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
|
||||
return ts.visitEachChild(node, visitor, context);
|
||||
}
|
||||
else {
|
||||
@@ -39599,6 +39626,7 @@ var ts;
|
||||
function visitNodesInConvertedLoop(node) {
|
||||
switch (node.kind) {
|
||||
case 212:
|
||||
node = isReturnVoidStatementInConstructorWithCapturedSuper(node) ? returnCapturedThis(node) : node;
|
||||
return visitReturnStatement(node);
|
||||
case 201:
|
||||
return visitVariableStatement(node);
|
||||
@@ -39913,7 +39941,10 @@ var ts;
|
||||
statementOffset++;
|
||||
}
|
||||
if (constructor) {
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) { return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset); });
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) {
|
||||
isInConstructorWithCapturedSuper = superCaptureStatus === 1;
|
||||
return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset);
|
||||
});
|
||||
ts.addRange(statements, body);
|
||||
}
|
||||
if (extendsClauseElement
|
||||
|
||||
+43
-8
@@ -32320,15 +32320,30 @@ var ts;
|
||||
}
|
||||
// If the given type is an object or union type, if that type has a single signature, and if
|
||||
// that signature is non-generic, return the signature. Otherwise return undefined.
|
||||
function getNonGenericSignature(type) {
|
||||
function getNonGenericSignature(type, node) {
|
||||
var signatures = getSignaturesOfStructuredType(type, 0 /* Call */);
|
||||
if (signatures.length === 1) {
|
||||
var signature = signatures[0];
|
||||
if (!signature.typeParameters) {
|
||||
if (!signature.typeParameters && !isAritySmaller(signature, node)) {
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
/** If the contextual signature has fewer parameters than the function expression, do not use it */
|
||||
function isAritySmaller(signature, target) {
|
||||
var targetParameterCount = 0;
|
||||
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
|
||||
var param = target.parameters[targetParameterCount];
|
||||
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
|
||||
targetParameterCount--;
|
||||
}
|
||||
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
|
||||
return sourceLength < targetParameterCount;
|
||||
}
|
||||
function isFunctionExpressionOrArrowFunction(node) {
|
||||
return node.kind === 180 /* FunctionExpression */ || node.kind === 181 /* ArrowFunction */;
|
||||
}
|
||||
@@ -32355,13 +32370,13 @@ var ts;
|
||||
return undefined;
|
||||
}
|
||||
if (!(type.flags & 65536 /* Union */)) {
|
||||
return getNonGenericSignature(type);
|
||||
return getNonGenericSignature(type, node);
|
||||
}
|
||||
var signatureList;
|
||||
var types = type.types;
|
||||
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
||||
var current = types_14[_i];
|
||||
var signature = getNonGenericSignature(current);
|
||||
var signature = getNonGenericSignature(current, node);
|
||||
if (signature) {
|
||||
if (!signatureList) {
|
||||
// This signature will contribute to contextual union signature
|
||||
@@ -48816,6 +48831,7 @@ var ts;
|
||||
var enclosingFunction;
|
||||
var enclosingNonArrowFunction;
|
||||
var enclosingNonAsyncFunctionBody;
|
||||
var isInConstructorWithCapturedSuper;
|
||||
/**
|
||||
* Used to track if we are emitting body of the converted loop
|
||||
*/
|
||||
@@ -48853,12 +48869,15 @@ var ts;
|
||||
var savedCurrentParent = currentParent;
|
||||
var savedCurrentNode = currentNode;
|
||||
var savedConvertedLoopState = convertedLoopState;
|
||||
var savedIsInConstructorWithCapturedSuper = isInConstructorWithCapturedSuper;
|
||||
if (ts.nodeStartsNewLexicalEnvironment(node)) {
|
||||
// don't treat content of nodes that start new lexical environment as part of converted loop copy
|
||||
// don't treat content of nodes that start new lexical environment as part of converted loop copy or constructor body
|
||||
isInConstructorWithCapturedSuper = false;
|
||||
convertedLoopState = undefined;
|
||||
}
|
||||
onBeforeVisitNode(node);
|
||||
var visited = f(node);
|
||||
isInConstructorWithCapturedSuper = savedIsInConstructorWithCapturedSuper;
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
enclosingFunction = savedEnclosingFunction;
|
||||
enclosingNonArrowFunction = savedEnclosingNonArrowFunction;
|
||||
@@ -48870,16 +48889,28 @@ var ts;
|
||||
currentNode = savedCurrentNode;
|
||||
return visited;
|
||||
}
|
||||
function returnCapturedThis(node) {
|
||||
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
|
||||
}
|
||||
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
||||
return isInConstructorWithCapturedSuper && node.kind === 212 /* ReturnStatement */ && !node.expression;
|
||||
}
|
||||
function shouldCheckNode(node) {
|
||||
return (node.transformFlags & 256 /* ES2015 */) !== 0 ||
|
||||
node.kind === 215 /* LabeledStatement */ ||
|
||||
(ts.isIterationStatement(node, /*lookInLabeledStatements*/ false) && shouldConvertIterationStatementBody(node));
|
||||
}
|
||||
function visitorWorker(node) {
|
||||
if (shouldCheckNode(node)) {
|
||||
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
||||
return returnCapturedThis(node);
|
||||
}
|
||||
else if (shouldCheckNode(node)) {
|
||||
return visitJavaScript(node);
|
||||
}
|
||||
else if (node.transformFlags & 512 /* ContainsES2015 */) {
|
||||
else if (node.transformFlags & 512 /* ContainsES2015 */ || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
|
||||
// we want to dive in this branch either if node has children with ES2015 specific syntax
|
||||
// or we are inside constructor that captures result of the super call so all returns without expression should be
|
||||
// rewritten. Note: we skip expressions since returns should never appear there
|
||||
return ts.visitEachChild(node, visitor, context);
|
||||
}
|
||||
else {
|
||||
@@ -48899,6 +48930,7 @@ var ts;
|
||||
function visitNodesInConvertedLoop(node) {
|
||||
switch (node.kind) {
|
||||
case 212 /* ReturnStatement */:
|
||||
node = isReturnVoidStatementInConstructorWithCapturedSuper(node) ? returnCapturedThis(node) : node;
|
||||
return visitReturnStatement(node);
|
||||
case 201 /* VariableStatement */:
|
||||
return visitVariableStatement(node);
|
||||
@@ -49353,7 +49385,10 @@ var ts;
|
||||
statementOffset++;
|
||||
}
|
||||
if (constructor) {
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) { return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, /*start*/ statementOffset); });
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) {
|
||||
isInConstructorWithCapturedSuper = superCaptureStatus === 1 /* ReplaceSuperCapture */;
|
||||
return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, /*start*/ statementOffset);
|
||||
});
|
||||
ts.addRange(statements, body);
|
||||
}
|
||||
// Return `_this` unless we're sure enough that it would be pointless to add a return statement.
|
||||
|
||||
@@ -32320,15 +32320,30 @@ var ts;
|
||||
}
|
||||
// If the given type is an object or union type, if that type has a single signature, and if
|
||||
// that signature is non-generic, return the signature. Otherwise return undefined.
|
||||
function getNonGenericSignature(type) {
|
||||
function getNonGenericSignature(type, node) {
|
||||
var signatures = getSignaturesOfStructuredType(type, 0 /* Call */);
|
||||
if (signatures.length === 1) {
|
||||
var signature = signatures[0];
|
||||
if (!signature.typeParameters) {
|
||||
if (!signature.typeParameters && !isAritySmaller(signature, node)) {
|
||||
return signature;
|
||||
}
|
||||
}
|
||||
}
|
||||
/** If the contextual signature has fewer parameters than the function expression, do not use it */
|
||||
function isAritySmaller(signature, target) {
|
||||
var targetParameterCount = 0;
|
||||
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
|
||||
var param = target.parameters[targetParameterCount];
|
||||
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
|
||||
targetParameterCount--;
|
||||
}
|
||||
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
|
||||
return sourceLength < targetParameterCount;
|
||||
}
|
||||
function isFunctionExpressionOrArrowFunction(node) {
|
||||
return node.kind === 180 /* FunctionExpression */ || node.kind === 181 /* ArrowFunction */;
|
||||
}
|
||||
@@ -32355,13 +32370,13 @@ var ts;
|
||||
return undefined;
|
||||
}
|
||||
if (!(type.flags & 65536 /* Union */)) {
|
||||
return getNonGenericSignature(type);
|
||||
return getNonGenericSignature(type, node);
|
||||
}
|
||||
var signatureList;
|
||||
var types = type.types;
|
||||
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
|
||||
var current = types_14[_i];
|
||||
var signature = getNonGenericSignature(current);
|
||||
var signature = getNonGenericSignature(current, node);
|
||||
if (signature) {
|
||||
if (!signatureList) {
|
||||
// This signature will contribute to contextual union signature
|
||||
@@ -48816,6 +48831,7 @@ var ts;
|
||||
var enclosingFunction;
|
||||
var enclosingNonArrowFunction;
|
||||
var enclosingNonAsyncFunctionBody;
|
||||
var isInConstructorWithCapturedSuper;
|
||||
/**
|
||||
* Used to track if we are emitting body of the converted loop
|
||||
*/
|
||||
@@ -48853,12 +48869,15 @@ var ts;
|
||||
var savedCurrentParent = currentParent;
|
||||
var savedCurrentNode = currentNode;
|
||||
var savedConvertedLoopState = convertedLoopState;
|
||||
var savedIsInConstructorWithCapturedSuper = isInConstructorWithCapturedSuper;
|
||||
if (ts.nodeStartsNewLexicalEnvironment(node)) {
|
||||
// don't treat content of nodes that start new lexical environment as part of converted loop copy
|
||||
// don't treat content of nodes that start new lexical environment as part of converted loop copy or constructor body
|
||||
isInConstructorWithCapturedSuper = false;
|
||||
convertedLoopState = undefined;
|
||||
}
|
||||
onBeforeVisitNode(node);
|
||||
var visited = f(node);
|
||||
isInConstructorWithCapturedSuper = savedIsInConstructorWithCapturedSuper;
|
||||
convertedLoopState = savedConvertedLoopState;
|
||||
enclosingFunction = savedEnclosingFunction;
|
||||
enclosingNonArrowFunction = savedEnclosingNonArrowFunction;
|
||||
@@ -48870,16 +48889,28 @@ var ts;
|
||||
currentNode = savedCurrentNode;
|
||||
return visited;
|
||||
}
|
||||
function returnCapturedThis(node) {
|
||||
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
|
||||
}
|
||||
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
|
||||
return isInConstructorWithCapturedSuper && node.kind === 212 /* ReturnStatement */ && !node.expression;
|
||||
}
|
||||
function shouldCheckNode(node) {
|
||||
return (node.transformFlags & 256 /* ES2015 */) !== 0 ||
|
||||
node.kind === 215 /* LabeledStatement */ ||
|
||||
(ts.isIterationStatement(node, /*lookInLabeledStatements*/ false) && shouldConvertIterationStatementBody(node));
|
||||
}
|
||||
function visitorWorker(node) {
|
||||
if (shouldCheckNode(node)) {
|
||||
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
|
||||
return returnCapturedThis(node);
|
||||
}
|
||||
else if (shouldCheckNode(node)) {
|
||||
return visitJavaScript(node);
|
||||
}
|
||||
else if (node.transformFlags & 512 /* ContainsES2015 */) {
|
||||
else if (node.transformFlags & 512 /* ContainsES2015 */ || (isInConstructorWithCapturedSuper && !ts.isExpression(node))) {
|
||||
// we want to dive in this branch either if node has children with ES2015 specific syntax
|
||||
// or we are inside constructor that captures result of the super call so all returns without expression should be
|
||||
// rewritten. Note: we skip expressions since returns should never appear there
|
||||
return ts.visitEachChild(node, visitor, context);
|
||||
}
|
||||
else {
|
||||
@@ -48899,6 +48930,7 @@ var ts;
|
||||
function visitNodesInConvertedLoop(node) {
|
||||
switch (node.kind) {
|
||||
case 212 /* ReturnStatement */:
|
||||
node = isReturnVoidStatementInConstructorWithCapturedSuper(node) ? returnCapturedThis(node) : node;
|
||||
return visitReturnStatement(node);
|
||||
case 201 /* VariableStatement */:
|
||||
return visitVariableStatement(node);
|
||||
@@ -49353,7 +49385,10 @@ var ts;
|
||||
statementOffset++;
|
||||
}
|
||||
if (constructor) {
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) { return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, /*start*/ statementOffset); });
|
||||
var body = saveStateAndInvoke(constructor, function (constructor) {
|
||||
isInConstructorWithCapturedSuper = superCaptureStatus === 1 /* ReplaceSuperCapture */;
|
||||
return ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, /*start*/ statementOffset);
|
||||
});
|
||||
ts.addRange(statements, body);
|
||||
}
|
||||
// Return `_this` unless we're sure enough that it would be pointless to add a return statement.
|
||||
|
||||
Reference in New Issue
Block a user