Update LKG

This commit is contained in:
Mohamed Hegazy
2016-10-28 10:38:08 -07:00
parent 86138e33c4
commit 467f252583
5 changed files with 200 additions and 37 deletions
+38 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+43 -8
View File
@@ -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.