Merge branch 'master' into theyreNotTHATSpecial

This commit is contained in:
Daniel Rosenwasser
2016-01-29 14:47:23 -08:00
199 changed files with 2426 additions and 474 deletions
+20
View File
@@ -2,9 +2,11 @@ TypeScript is authored by:
* Adam Freidin
* Ahmad Farid
* Akshar Patel
* Anders Hejlsberg
* Arnav Singh
* Arthur Ozga
* Asad Saeeduddin
* Basarat Ali Syed
* Ben Duffield
* Bill Ticehurst
@@ -15,30 +17,39 @@ TypeScript is authored by:
* Colby Russell
* Colin Snover
* Cyrus Najmabadi
* Dan Corder
* Dan Quirk
* Daniel Rosenwasser
* @dashaus
* David Li
* Denis Nedelyaev
* Dick van den Brink
* Dirk Bäumer
* Dirk Holtwick
* Eyas Sharaiha
* @falsandtru
* Frank Wallis
* Gabriel Isenberg
* Gilad Peleg
* Graeme Wicksted
* Guillaume Salles
* Guy Bedford
* Harald Niesche
* Iain Monro
* Ingvar Stepanyan
* Ivo Gabe de Wolff
* James Whitney
* Jason Freeman
* Jason Killian
* Jason Ramsay
* Jed Mao
* Jeffrey Morlan
* Johannes Rieken
* John Vilk
* Jonathan Bond-Caron
* Jonathan Park
* Jonathan Turner
* Jonathon Smith
* Josh Kalderimis
* Julian Williams
* Kagami Sascha Rosylight
@@ -46,21 +57,27 @@ TypeScript is authored by:
* Ken Howard
* Kenji Imamula
* Lorant Pinter
* Lucien Greathouse
* Martin Všetička
* Masahiro Wakame
* Mattias Buelens
* Max Deepfield
* Micah Zoltu
* Mohamed Hegazy
* Nathan Shively-Sanders
* Nathan Yee
* Oleg Mihailik
* Oleksandr Chekhovskyi
* Paul van Brenk
* @pcbro
* Pedro Maltez
* Philip Bulley
* piloopin
* @progre
* Punya Biswal
* Richard Sentino
* Ron Buckton
* Rowan Wyborn
* Ryan Cavanaugh
* Ryohei Ikegami
* Sébastien Arod
@@ -71,7 +88,9 @@ TypeScript is authored by:
* Solal Pirelli
* Stan Thomas
* Steve Lucco
* Thomas Loubiou
* Tien Hoanhtien
* Tim Perry
* Tingan Ho
* togru
* Tomas Grubliauskas
@@ -81,5 +100,6 @@ TypeScript is authored by:
* Wesley Wigham
* York Yao
* Yui Tanglertsampan
* Yuichi Nukiyama
* Zev Spitz
* Zhengbo Li
+1 -1
View File
@@ -1462,7 +1462,7 @@ namespace ts {
function bindCallExpression(node: CallExpression) {
// We're only inspecting call expressions to detect CommonJS modules, so we can skip
// this check if we've already seen the module indicator
if (!file.commonJsModuleIndicator && isRequireCall(node)) {
if (!file.commonJsModuleIndicator && isRequireCall(node, /*checkArgumentIsStringLiteral*/false)) {
setCommonJsModuleIndicator(node);
}
}
+113 -15
View File
@@ -2465,10 +2465,21 @@ namespace ts {
function getDeclarationContainer(node: Node): Node {
node = getRootDeclaration(node);
while (node) {
switch (node.kind) {
case SyntaxKind.VariableDeclaration:
case SyntaxKind.VariableDeclarationList:
case SyntaxKind.ImportSpecifier:
case SyntaxKind.NamedImports:
case SyntaxKind.NamespaceImport:
case SyntaxKind.ImportClause:
node = node.parent;
break;
// Parent chain:
// VaribleDeclaration -> VariableDeclarationList -> VariableStatement -> 'Declaration Container'
return node.kind === SyntaxKind.VariableDeclaration ? node.parent.parent.parent : node.parent;
default:
return node.parent;
}
}
}
function getTypeOfPrototypeProperty(prototype: Symbol): Type {
@@ -2610,7 +2621,7 @@ namespace ts {
}
}
else if (declaration.kind === SyntaxKind.Parameter) {
// If it's a parameter, see if the parent has a jsdoc comment with an @param
// If it's a parameter, see if the parent has a jsdoc comment with an @param
// annotation.
const paramTag = getCorrespondingJSDocParameterTag(<ParameterDeclaration>declaration);
if (paramTag && paramTag.typeExpression) {
@@ -2625,7 +2636,7 @@ namespace ts {
function getTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration): Type {
if (declaration.parserContextFlags & ParserContextFlags.JavaScriptFile) {
// If this is a variable in a JavaScript file, then use the JSDoc type (if it has
// one as its type), otherwise fallback to the below standard TS codepaths to
// one as its type), otherwise fallback to the below standard TS codepaths to
// try to figure it out.
const type = getTypeForVariableLikeDeclarationFromJSDocComment(declaration);
if (type && type !== unknownType) {
@@ -4069,7 +4080,7 @@ namespace ts {
const isJSConstructSignature = isJSDocConstructSignature(declaration);
let returnType: Type = undefined;
// If this is a JSDoc construct signature, then skip the first parameter in the
// If this is a JSDoc construct signature, then skip the first parameter in the
// parameter list. The first parameter represents the return type of the construct
// signature.
for (let i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) {
@@ -4478,7 +4489,7 @@ namespace ts {
}
if (symbol.flags & SymbolFlags.Value && node.kind === SyntaxKind.JSDocTypeReference) {
// A JSDocTypeReference may have resolved to a value (as opposed to a type). In
// A JSDocTypeReference may have resolved to a value (as opposed to a type). In
// that case, the type of this reference is just the type of the value we resolved
// to.
return getTypeOfSymbol(symbol);
@@ -7251,6 +7262,14 @@ namespace ts {
let container = getThisContainer(node, /* includeArrowFunctions */ true);
let needToCaptureLexicalThis = false;
if (container.kind === SyntaxKind.Constructor) {
const baseTypeNode = getClassExtendsHeritageClauseElement(<ClassLikeDeclaration>container.parent);
if (baseTypeNode && !(getNodeCheckFlags(container) & NodeCheckFlags.HasSeenSuperCall)) {
// In ES6, super inside constructor of class-declaration has to precede "this" accessing
error(node, Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
}
}
// Now skip arrow functions to get the "real" owner of 'this'.
if (container.kind === SyntaxKind.ArrowFunction) {
container = getThisContainer(container, /* includeArrowFunctions */ false);
@@ -8752,7 +8771,7 @@ namespace ts {
*/
function checkClassPropertyAccess(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, type: Type, prop: Symbol): boolean {
const flags = getDeclarationFlagsFromSymbol(prop);
const declaringClass = <InterfaceType>getDeclaredTypeOfSymbol(prop.parent);
const declaringClass = <InterfaceType>getDeclaredTypeOfSymbol(getMergedSymbol(prop.parent));
if (left.kind === SyntaxKind.SuperKeyword) {
const errorNode = node.kind === SyntaxKind.PropertyAccessExpression ?
@@ -10197,6 +10216,11 @@ namespace ts {
const signature = getResolvedSignature(node);
if (node.expression.kind === SyntaxKind.SuperKeyword) {
const containgFunction = getContainingFunction(node.expression);
if (containgFunction && containgFunction.kind === SyntaxKind.Constructor) {
getNodeLinks(containgFunction).flags |= NodeCheckFlags.HasSeenSuperCall;
}
return voidType;
}
if (node.kind === SyntaxKind.NewExpression) {
@@ -10223,7 +10247,7 @@ namespace ts {
}
// In JavaScript files, calls to any identifier 'require' are treated as external module imports
if (isInJavaScriptFile(node) && isRequireCall(node)) {
if (isInJavaScriptFile(node) && isRequireCall(node, /*checkArgumentIsStringLiteral*/true)) {
return resolveExternalModuleTypeByLiteral(<StringLiteral>node.arguments[0]);
}
@@ -10405,7 +10429,8 @@ namespace ts {
}
else {
error(func, Diagnostics.No_best_common_type_exists_among_return_expressions);
return unknownType;
// Defer to unioning the return types so we get a) downstream errors earlier and b) better Salsa experience
return getUnionType(types);
}
}
@@ -10483,7 +10508,7 @@ namespace ts {
/*
*TypeScript Specification 1.0 (6.3) - July 2014
* An explicitly typed function whose return type isn't the Void type,
* An explicitly typed function whose return type isn't the Void type,
* the Any type, or a union type containing the Void or Any type as a constituent
* must have at least one return statement somewhere in its body.
* An exception to this rule is if the function implementation consists of a single 'throw' statement.
@@ -11639,6 +11664,9 @@ namespace ts {
checkTypeAssignableTo(iterableIteratorInstantiation, returnType, node.type);
}
}
else if (isAsyncFunctionLike(node)) {
checkAsyncFunctionReturnType(<FunctionLikeDeclaration>node);
}
}
}
}
@@ -11808,10 +11836,6 @@ namespace ts {
if (!superCallStatement) {
error(node, Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
}
else {
// In such a required super call, it is a compile-time error for argument expressions to reference this.
markThisReferencesAsErrors(superCallStatement.expression);
}
}
}
else if (baseConstructorType !== nullType) {
@@ -12446,6 +12470,36 @@ namespace ts {
}
}
/**
* Checks that the return type provided is an instantiation of the global Promise<T> type
* and returns the awaited type of the return type.
*
* @param returnType The return type of a FunctionLikeDeclaration
* @param location The node on which to report the error.
*/
function checkCorrectPromiseType(returnType: Type, location: Node) {
if (returnType === unknownType) {
// The return type already had some other error, so we ignore and return
// the unknown type.
return unknownType;
}
const globalPromiseType = getGlobalPromiseType();
if (globalPromiseType === emptyGenericType
|| globalPromiseType === getTargetType(returnType)) {
// Either we couldn't resolve the global promise type, which would have already
// reported an error, or we could resolve it and the return type is a valid type
// reference to the global type. In either case, we return the awaited type for
// the return type.
return checkAwaitedType(returnType, location, Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type);
}
// The promise type was not a valid type reference to the global promise type, so we
// report an error and return the unknown type.
error(location, Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type);
return unknownType;
}
/**
* Checks the return type of an async function to ensure it is a compatible
* Promise implementation.
@@ -12460,6 +12514,11 @@ namespace ts {
* callable `then` signature.
*/
function checkAsyncFunctionReturnType(node: FunctionLikeDeclaration): Type {
if (languageVersion >= ScriptTarget.ES6) {
const returnType = getTypeFromTypeNode(node.type);
return checkCorrectPromiseType(returnType, node.type);
}
const globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType();
if (globalPromiseConstructorLikeType === emptyObjectType) {
// If we couldn't resolve the global PromiseConstructorLike type we cannot verify
@@ -12675,6 +12734,7 @@ namespace ts {
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
}
@@ -12859,6 +12919,25 @@ namespace ts {
}
}
function checkCollisionWithGlobalPromiseInGeneratedCode(node: Node, name: Identifier): void {
if (!needCollisionCheckForIdentifier(node, name, "Promise")) {
return;
}
// Uninstantiated modules shouldnt do this check
if (node.kind === SyntaxKind.ModuleDeclaration && getModuleInstanceState(node) !== ModuleInstanceState.Instantiated) {
return;
}
// In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
const parent = getDeclarationContainer(node);
if (parent.kind === SyntaxKind.SourceFile && isExternalOrCommonJsModule(<SourceFile>parent) && parent.flags & NodeFlags.HasAsyncFunctions) {
// If the declaration happens to be in external module, report error that Promise is a reserved identifier.
error(name, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions,
declarationNameToString(name), declarationNameToString(name));
}
}
function checkVarDeclaredNamesNotShadowed(node: VariableDeclaration | BindingElement) {
// - ScriptBody : StatementList
// It is a Syntax Error if any element of the LexicallyDeclaredNames of StatementList
@@ -13037,6 +13116,7 @@ namespace ts {
checkCollisionWithCapturedSuperVariable(node, <Identifier>node.name);
checkCollisionWithCapturedThisVariable(node, <Identifier>node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, <Identifier>node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, <Identifier>node.name);
}
}
@@ -13803,6 +13883,7 @@ namespace ts {
checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
checkTypeParameters(node.typeParameters);
checkExportsOnMergedDeclarations(node);
@@ -14309,6 +14390,7 @@ namespace ts {
checkTypeNameIsReserved(node.name, Diagnostics.Enum_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
computeEnumMemberValues(node);
@@ -14413,6 +14495,7 @@ namespace ts {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
const symbol = getSymbolOfNode(node);
@@ -14605,6 +14688,7 @@ namespace ts {
function checkImportBinding(node: ImportEqualsDeclaration | ImportClause | NamespaceImport | ImportSpecifier) {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkAliasSymbol(node);
}
@@ -15217,6 +15301,20 @@ namespace ts {
return getSymbolOfNode(entityName.parent);
}
if (isInJavaScriptFile(entityName) && entityName.parent.kind === SyntaxKind.PropertyAccessExpression) {
const specialPropertyAssignmentKind = getSpecialPropertyAssignmentKind(entityName.parent.parent);
switch (specialPropertyAssignmentKind) {
case SpecialPropertyAssignmentKind.ExportsProperty:
case SpecialPropertyAssignmentKind.PrototypeProperty:
return getSymbolOfNode(entityName.parent);
case SpecialPropertyAssignmentKind.ThisProperty:
case SpecialPropertyAssignmentKind.ModuleExports:
return getSymbolOfNode(entityName.parent.parent);
default:
// Fall through if it is not a special property assignment
}
}
if (entityName.parent.kind === SyntaxKind.ExportAssignment) {
return resolveEntityName(<Identifier>entityName,
/*all meanings*/ SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias);
+18 -13
View File
@@ -637,18 +637,21 @@ namespace ts {
}
}
function emitClassMemberDeclarationFlags(node: Declaration) {
if (node.flags & NodeFlags.Private) {
function emitClassMemberDeclarationFlags(flags: NodeFlags) {
if (flags & NodeFlags.Private) {
write("private ");
}
else if (node.flags & NodeFlags.Protected) {
else if (flags & NodeFlags.Protected) {
write("protected ");
}
if (node.flags & NodeFlags.Static) {
if (flags & NodeFlags.Static) {
write("static ");
}
if (node.flags & NodeFlags.Abstract) {
if (flags & NodeFlags.Readonly) {
write("readonly ");
}
if (flags & NodeFlags.Abstract) {
write("abstract ");
}
}
@@ -1074,7 +1077,7 @@ namespace ts {
}
emitJsDocComments(node);
emitClassMemberDeclarationFlags(node);
emitClassMemberDeclarationFlags(node.flags);
emitVariableDeclaration(<VariableDeclaration>node);
write(";");
writeLine();
@@ -1227,7 +1230,7 @@ namespace ts {
if (node === accessors.firstAccessor) {
emitJsDocComments(accessors.getAccessor);
emitJsDocComments(accessors.setAccessor);
emitClassMemberDeclarationFlags(node);
emitClassMemberDeclarationFlags(node.flags | (accessors.setAccessor ? 0 : NodeFlags.Readonly));
writeTextOfNode(currentText, node.name);
if (!(node.flags & NodeFlags.Private)) {
accessorWithTypeAnnotation = node;
@@ -1314,7 +1317,7 @@ namespace ts {
emitModuleElementDeclarationFlags(node);
}
else if (node.kind === SyntaxKind.MethodDeclaration) {
emitClassMemberDeclarationFlags(node);
emitClassMemberDeclarationFlags(node.flags);
}
if (node.kind === SyntaxKind.FunctionDeclaration) {
write("function ");
@@ -1342,15 +1345,17 @@ namespace ts {
const prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
// Construct signature or constructor type write new Signature
if (node.kind === SyntaxKind.ConstructSignature || node.kind === SyntaxKind.ConstructorType) {
write("new ");
}
emitTypeParameters(node.typeParameters);
if (node.kind === SyntaxKind.IndexSignature) {
// Index signature can have readonly modifier
emitClassMemberDeclarationFlags(node.flags);
write("[");
}
else {
// Construct signature or constructor type write new Signature
if (node.kind === SyntaxKind.ConstructSignature || node.kind === SyntaxKind.ConstructorType) {
write("new ");
}
emitTypeParameters(node.typeParameters);
write("(");
}
+13 -1
View File
@@ -199,6 +199,10 @@
"category": "Error",
"code": 1063
},
"The return type of an async function or method must be the global Promise<T> type.": {
"category": "Error",
"code": 1064
},
"In ambient enum declarations member initializer must be constant expression.": {
"category": "Error",
"code": 1066
@@ -802,7 +806,7 @@
"A decorator can only decorate a method implementation, not an overload.": {
"category": "Error",
"code": 1249
},
},
"'with' statements are not allowed in an async function block.": {
"category": "Error",
"code": 1300
@@ -1695,6 +1699,10 @@
"category": "Error",
"code": 2528
},
"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions.": {
"category": "Error",
"code": 2529
},
"JSX element attributes type '{0}' may not be a union type.": {
"category": "Error",
"code": 2600
@@ -2763,5 +2771,9 @@
"JSX element '{0}' has no corresponding closing tag.": {
"category": "Error",
"code": 17008
},
"'super' must be called before accessing 'this' in the constructor of a derived class.": {
"category": "Error",
"code": 17009
}
}
+23 -8
View File
@@ -320,7 +320,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
const awaiterHelper = `
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -477,6 +477,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
// =>
// var x;... exporter("x", x = 1)
let exportFunctionForFile: string;
let contextObjectForFile: string;
let generatedNameSet: Map<string>;
let nodeToGeneratedName: string[];
@@ -557,6 +558,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
currentText = undefined;
currentLineMap = undefined;
exportFunctionForFile = undefined;
contextObjectForFile = undefined;
generatedNameSet = undefined;
nodeToGeneratedName = undefined;
computedPropertyNamesToGeneratedNames = undefined;
@@ -585,6 +587,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
currentText = sourceFile.text;
currentLineMap = getLineStarts(sourceFile);
exportFunctionForFile = undefined;
contextObjectForFile = undefined;
isEs6Module = sourceFile.symbol && sourceFile.symbol.exports && !!sourceFile.symbol.exports["___esModule"];
renamedDependencies = sourceFile.renamedDependencies;
currentFileIdentifiers = sourceFile.identifiers;
@@ -4561,11 +4564,11 @@ const _super = (function (geti, seti) {
write(", void 0, ");
}
if (promiseConstructor) {
emitEntityNameAsExpression(promiseConstructor, /*useFallback*/ false);
if (languageVersion >= ScriptTarget.ES6 || !promiseConstructor) {
write("void 0");
}
else {
write("Promise");
emitEntityNameAsExpression(promiseConstructor, /*useFallback*/ false);
}
// Emit the call to __awaiter.
@@ -7058,6 +7061,7 @@ const _super = (function (geti, seti) {
Debug.assert(!exportFunctionForFile);
// make sure that name of 'exports' function does not conflict with existing identifiers
exportFunctionForFile = makeUniqueName("exports");
contextObjectForFile = makeUniqueName("context");
writeLine();
write("System.register(");
writeModuleName(node, emitRelativePathAsModuleName);
@@ -7068,14 +7072,22 @@ const _super = (function (geti, seti) {
for (let i = 0; i < externalImports.length; i++) {
const text = getExternalModuleNameText(externalImports[i], emitRelativePathAsModuleName);
if (hasProperty(groupIndices, text)) {
if (text === undefined) {
continue;
}
// text should be quoted string
// for deduplication purposes in key remove leading and trailing quotes so 'a' and "a" will be considered the same
const key = text.substr(1, text.length - 2);
if (hasProperty(groupIndices, key)) {
// deduplicate/group entries in dependency list by the dependency name
const groupIndex = groupIndices[text];
const groupIndex = groupIndices[key];
dependencyGroups[groupIndex].push(externalImports[i]);
continue;
}
else {
groupIndices[text] = dependencyGroups.length;
groupIndices[key] = dependencyGroups.length;
dependencyGroups.push([externalImports[i]]);
}
@@ -7085,10 +7097,13 @@ const _super = (function (geti, seti) {
write(text);
}
write(`], function(${exportFunctionForFile}) {`);
write(`], function(${exportFunctionForFile}, ${contextObjectForFile}) {`);
writeLine();
increaseIndent();
const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ true);
writeLine();
write(`var __moduleName = ${contextObjectForFile} && ${contextObjectForFile}.id;`);
writeLine();
emitEmitHelpers(node);
emitCaptureThisForNodeIfNecessary(node);
emitSystemModuleBody(node, dependencyGroups, startIndex);
+3 -3
View File
@@ -4017,7 +4017,7 @@ namespace ts {
setDecoratorContext(/*val*/ true);
}
return finishNode(node);
return addJSDocComment(finishNode(node));
}
function parseOptionalIdentifier() {
@@ -4301,13 +4301,13 @@ namespace ts {
const labeledStatement = <LabeledStatement>createNode(SyntaxKind.LabeledStatement, fullStart);
labeledStatement.label = <Identifier>expression;
labeledStatement.statement = parseStatement();
return finishNode(labeledStatement);
return addJSDocComment(finishNode(labeledStatement));
}
else {
const expressionStatement = <ExpressionStatement>createNode(SyntaxKind.ExpressionStatement, fullStart);
expressionStatement.expression = expression;
parseSemicolon();
return finishNode(expressionStatement);
return addJSDocComment(finishNode(expressionStatement));
}
}
+1 -1
View File
@@ -1328,7 +1328,7 @@ namespace ts {
}
function collectRequireCalls(node: Node): void {
if (isRequireCall(node)) {
if (isRequireCall(node, /*checkArgumentIsStringLiteral*/true)) {
(imports || (imports = [])).push(<StringLiteral>(<CallExpression>node).arguments[0]);
}
else {
+1
View File
@@ -2070,6 +2070,7 @@ namespace ts {
LoopWithCapturedBlockScopedBinding = 0x00010000, // Loop that contains block scoped variable captured in closure
CapturedBlockScopedBinding = 0x00020000, // Block-scoped binding that is captured in some function
BlockScopedBindingInLoop = 0x00040000, // Block-scoped binding with declaration nested inside iteration statement
HasSeenSuperCall = 0x00080000, // Set during the binding when encounter 'super'
}
/* @internal */
+20 -6
View File
@@ -1086,12 +1086,14 @@ namespace ts {
* exactly one argument.
* This function does not test if the node is in a JavaScript file or not.
*/
export function isRequireCall(expression: Node): expression is CallExpression {
export function isRequireCall(expression: Node, checkArgumentIsStringLiteral: boolean): expression is CallExpression {
// of the form 'require("name")'
return expression.kind === SyntaxKind.CallExpression &&
(<CallExpression>expression).expression.kind === SyntaxKind.Identifier &&
(<Identifier>(<CallExpression>expression).expression).text === "require" &&
(<CallExpression>expression).arguments.length === 1;
const isRequire = expression.kind === SyntaxKind.CallExpression &&
(<CallExpression>expression).expression.kind === SyntaxKind.Identifier &&
(<Identifier>(<CallExpression>expression).expression).text === "require" &&
(<CallExpression>expression).arguments.length === 1;
return isRequire && (!checkArgumentIsStringLiteral || (<CallExpression>expression).arguments[0].kind === SyntaxKind.StringLiteral);
}
/// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property
@@ -1205,7 +1207,19 @@ namespace ts {
node.parent.parent.parent.kind === SyntaxKind.VariableStatement;
const variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined;
return variableStatementNode && variableStatementNode.jsDocComment;
if (variableStatementNode) {
return variableStatementNode.jsDocComment;
}
// Also recognize when the node is the RHS of an assignment expression
const isSourceOfAssignmentExpressionStatement =
node.parent && node.parent.parent &&
node.parent.kind === SyntaxKind.BinaryExpression &&
(node.parent as BinaryExpression).operatorToken.kind === SyntaxKind.EqualsToken &&
node.parent.parent.kind === SyntaxKind.ExpressionStatement;
if (isSourceOfAssignmentExpressionStatement) {
return node.parent.parent.jsDocComment;
}
}
return undefined;
@@ -17,8 +17,9 @@ module M {
//// [aliasesInSystemModule1.js]
System.register(['foo'], function(exports_1) {
System.register(['foo'], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var alias;
var cls, cls2, x, y, z, M;
return {
@@ -16,8 +16,9 @@ module M {
}
//// [aliasesInSystemModule2.js]
System.register(["foo"], function(exports_1) {
System.register(["foo"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var foo_1;
var cls, cls2, x, y, z, M;
return {
@@ -10,8 +10,9 @@ export class Foo {
}
//// [b.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var Foo;
return {
setters:[],
@@ -26,8 +27,9 @@ System.register([], function(exports_1) {
}
});
//// [a.js]
System.register(["./b"], function(exports_1) {
System.register(["./b"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var b_1;
var x;
return {
@@ -11,8 +11,9 @@ export class Foo {
//// [b.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var Foo;
return {
setters:[],
@@ -27,8 +28,9 @@ System.register([], function(exports_1) {
}
});
//// [a.js]
System.register(["./b"], function(exports_1) {
System.register(["./b"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var b_1;
var x;
return {
@@ -12,8 +12,9 @@ export var x = new Foo();
//// [a.js]
System.register(["./b"], function(exports_1) {
System.register(["./b"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var b_1;
var x;
return {
@@ -12,8 +12,9 @@ export var x = new Foo();
//// [a.js]
System.register(["./b"], function(exports_1) {
System.register(["./b"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var b_1;
var x;
return {
@@ -7,8 +7,9 @@ export default class {}
export default function() {}
//// [a.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var default_1;
return {
setters:[],
@@ -20,8 +21,9 @@ System.register([], function(exports_1) {
}
});
//// [b.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
function default_1() { }
exports_1("default", default_1);
return {
@@ -1,10 +0,0 @@
tests/cases/conformance/async/es6/asyncAliasReturnType_es6.ts(3,16): error TS1055: Type 'PromiseAlias' is not a valid async function return type.
==== tests/cases/conformance/async/es6/asyncAliasReturnType_es6.ts (1 errors) ====
type PromiseAlias<T> = Promise<T>;
async function f(): PromiseAlias<void> {
~
!!! error TS1055: Type 'PromiseAlias' is not a valid async function return type.
}
@@ -6,6 +6,6 @@ async function f(): PromiseAlias<void> {
//// [asyncAliasReturnType_es6.js]
function f() {
return __awaiter(this, void 0, PromiseAlias, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
@@ -0,0 +1,11 @@
=== tests/cases/conformance/async/es6/asyncAliasReturnType_es6.ts ===
type PromiseAlias<T> = Promise<T>;
>PromiseAlias : Symbol(PromiseAlias, Decl(asyncAliasReturnType_es6.ts, 0, 0))
>T : Symbol(T, Decl(asyncAliasReturnType_es6.ts, 0, 18))
>Promise : Symbol(Promise, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(asyncAliasReturnType_es6.ts, 0, 18))
async function f(): PromiseAlias<void> {
>f : Symbol(f, Decl(asyncAliasReturnType_es6.ts, 0, 34))
>PromiseAlias : Symbol(PromiseAlias, Decl(asyncAliasReturnType_es6.ts, 0, 0))
}
@@ -0,0 +1,11 @@
=== tests/cases/conformance/async/es6/asyncAliasReturnType_es6.ts ===
type PromiseAlias<T> = Promise<T>;
>PromiseAlias : Promise<T>
>T : T
>Promise : Promise<T>
>T : T
async function f(): PromiseAlias<void> {
>f : () => Promise<void>
>PromiseAlias : Promise<T>
}
@@ -4,5 +4,5 @@ var foo = async (): Promise<void> => {
};
//// [asyncArrowFunction1_es6.js]
var foo = () => __awaiter(this, void 0, Promise, function* () {
var foo = () => __awaiter(this, void 0, void 0, function* () {
});
@@ -4,5 +4,5 @@ var foo = async (a = await): Promise<void> => {
}
//// [asyncArrowFunction6_es6.js]
var foo = (a = yield ) => __awaiter(this, void 0, Promise, function* () {
var foo = (a = yield ) => __awaiter(this, void 0, void 0, function* () {
});
@@ -7,8 +7,8 @@ var bar = async (): Promise<void> => {
}
//// [asyncArrowFunction7_es6.js]
var bar = () => __awaiter(this, void 0, Promise, function* () {
var bar = () => __awaiter(this, void 0, void 0, function* () {
// 'await' here is an identifier, and not an await expression.
var foo = (a = yield ) => __awaiter(this, void 0, Promise, function* () {
var foo = (a = yield ) => __awaiter(this, void 0, void 0, function* () {
});
});
@@ -5,6 +5,6 @@ var foo = async (): Promise<void> => {
}
//// [asyncArrowFunction8_es6.js]
var foo = () => __awaiter(this, void 0, Promise, function* () {
var foo = () => __awaiter(this, void 0, void 0, function* () {
var v = { [yield ]: foo };
});
@@ -11,6 +11,6 @@ class C {
class C {
method() {
function other() { }
var fn = () => __awaiter(this, arguments, Promise, function* () { return yield other.apply(this, arguments); });
var fn = () => __awaiter(this, arguments, void 0, function* () { return yield other.apply(this, arguments); });
}
}
@@ -9,6 +9,6 @@ class C {
//// [asyncArrowFunctionCapturesThis_es6.js]
class C {
method() {
var fn = () => __awaiter(this, void 0, Promise, function* () { return yield this; });
var fn = () => __awaiter(this, void 0, void 0, function* () { return yield this; });
}
}
@@ -41,7 +41,7 @@ module M {
//// [asyncAwaitIsolatedModules_es6.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -49,65 +49,65 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
function f0() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
function f1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
function f3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
let f4 = function () {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f5 = function () {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f6 = function () {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f7 = () => __awaiter(this, void 0, Promise, function* () { });
let f8 = () => __awaiter(this, void 0, Promise, function* () { });
let f9 = () => __awaiter(this, void 0, MyPromise, function* () { });
let f10 = () => __awaiter(this, void 0, Promise, function* () { return p; });
let f11 = () => __awaiter(this, void 0, Promise, function* () { return mp; });
let f12 = () => __awaiter(this, void 0, Promise, function* () { return mp; });
let f13 = () => __awaiter(this, void 0, MyPromise, function* () { return p; });
let f7 = () => __awaiter(this, void 0, void 0, function* () { });
let f8 = () => __awaiter(this, void 0, void 0, function* () { });
let f9 = () => __awaiter(this, void 0, void 0, function* () { });
let f10 = () => __awaiter(this, void 0, void 0, function* () { return p; });
let f11 = () => __awaiter(this, void 0, void 0, function* () { return mp; });
let f12 = () => __awaiter(this, void 0, void 0, function* () { return mp; });
let f13 = () => __awaiter(this, void 0, void 0, function* () { return p; });
let o = {
m1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
},
m2() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
},
m3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
};
class C {
m1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
m2() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
m3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m4() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m5() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m6() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
}
var M;
(function (M) {
function f1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
M.f1 = f1;
})(M || (M = {}));
+24 -24
View File
@@ -41,7 +41,7 @@ module M {
//// [asyncAwait_es6.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -49,65 +49,65 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
function f0() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
function f1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
function f3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
let f4 = function () {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f5 = function () {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f6 = function () {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
};
let f7 = () => __awaiter(this, void 0, Promise, function* () { });
let f8 = () => __awaiter(this, void 0, Promise, function* () { });
let f9 = () => __awaiter(this, void 0, MyPromise, function* () { });
let f10 = () => __awaiter(this, void 0, Promise, function* () { return p; });
let f11 = () => __awaiter(this, void 0, Promise, function* () { return mp; });
let f12 = () => __awaiter(this, void 0, Promise, function* () { return mp; });
let f13 = () => __awaiter(this, void 0, MyPromise, function* () { return p; });
let f7 = () => __awaiter(this, void 0, void 0, function* () { });
let f8 = () => __awaiter(this, void 0, void 0, function* () { });
let f9 = () => __awaiter(this, void 0, void 0, function* () { });
let f10 = () => __awaiter(this, void 0, void 0, function* () { return p; });
let f11 = () => __awaiter(this, void 0, void 0, function* () { return mp; });
let f12 = () => __awaiter(this, void 0, void 0, function* () { return mp; });
let f13 = () => __awaiter(this, void 0, void 0, function* () { return p; });
let o = {
m1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
},
m2() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
},
m3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
};
class C {
m1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
m2() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
m3() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m4() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m5() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
static m6() {
return __awaiter(this, void 0, MyPromise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
}
var M;
(function (M) {
function f1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
M.f1 = f1;
})(M || (M = {}));
@@ -4,6 +4,6 @@ async function await(): Promise<void> {
//// [asyncFunctionDeclaration11_es6.js]
function await() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
@@ -7,7 +7,7 @@ async function foo(): Promise<void> {
//// [asyncFunctionDeclaration13_es6.js]
function foo() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
// Legal to use 'await' in a type context.
var v;
});
@@ -5,7 +5,7 @@ async function foo(): Promise<void> {
//// [asyncFunctionDeclaration14_es6.js]
function foo() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
return;
});
}
@@ -1,12 +1,8 @@
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(6,16): error TS1055: Type '{}' is not a valid async function return type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(7,16): error TS1055: Type 'any' is not a valid async function return type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(8,16): error TS1055: Type 'number' is not a valid async function return type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(9,16): error TS1055: Type 'PromiseLike' is not a valid async function return type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(10,16): error TS1055: Type 'typeof Thenable' is not a valid async function return type.
Type 'Thenable' is not assignable to type 'PromiseLike<any>'.
Types of property 'then' are incompatible.
Type '() => void' is not assignable to type '{ <TResult>(onfulfilled?: (value: any) => TResult | PromiseLike<TResult>, onrejected?: (reason: any) => TResult | PromiseLike<TResult>): PromiseLike<TResult>; <TResult>(onfulfilled?: (value: any) => TResult | PromiseLike<TResult>, onrejected?: (reason: any) => void): PromiseLike<TResult>; }'.
Type 'void' is not assignable to type 'PromiseLike<any>'.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(6,23): error TS1064: The return type of an async function or method must be the global Promise<T> type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(7,23): error TS1064: The return type of an async function or method must be the global Promise<T> type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(8,23): error TS1064: The return type of an async function or method must be the global Promise<T> type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(9,23): error TS1064: The return type of an async function or method must be the global Promise<T> type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(10,23): error TS1064: The return type of an async function or method must be the global Promise<T> type.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(17,16): error TS1059: Return expression in async function does not have a valid callable 'then' member.
tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration15_es6.ts(23,25): error TS1058: Operand for 'await' does not have a valid callable 'then' member.
@@ -18,24 +14,20 @@ tests/cases/conformance/async/es6/functionDeclarations/asyncFunctionDeclaration1
declare let thenable: Thenable;
async function fn1() { } // valid: Promise<void>
async function fn2(): { } { } // error
~~~
!!! error TS1055: Type '{}' is not a valid async function return type.
~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
async function fn3(): any { } // error
~~~
!!! error TS1055: Type 'any' is not a valid async function return type.
~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
async function fn4(): number { } // error
~~~
!!! error TS1055: Type 'number' is not a valid async function return type.
~~~~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
async function fn5(): PromiseLike<void> { } // error
~~~
!!! error TS1055: Type 'PromiseLike' is not a valid async function return type.
~~~~~~~~~~~~~~~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
async function fn6(): Thenable { } // error
~~~
!!! error TS1055: Type 'typeof Thenable' is not a valid async function return type.
!!! error TS1055: Type 'Thenable' is not assignable to type 'PromiseLike<any>'.
!!! error TS1055: Types of property 'then' are incompatible.
!!! error TS1055: Type '() => void' is not assignable to type '{ <TResult>(onfulfilled?: (value: any) => TResult | PromiseLike<TResult>, onrejected?: (reason: any) => TResult | PromiseLike<TResult>): PromiseLike<TResult>; <TResult>(onfulfilled?: (value: any) => TResult | PromiseLike<TResult>, onrejected?: (reason: any) => void): PromiseLike<TResult>; }'.
!!! error TS1055: Type 'void' is not assignable to type 'PromiseLike<any>'.
~~~~~~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
async function fn7() { return; } // valid: Promise<void>
async function fn8() { return 1; } // valid: Promise<number>
async function fn9() { return null; } // valid: Promise<any>
@@ -26,59 +26,59 @@ async function fn19() { await thenable; } // error
//// [asyncFunctionDeclaration15_es6.js]
function fn1() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // valid: Promise<void>
function fn2() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // error
function fn3() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // error
function fn4() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // error
function fn5() {
return __awaiter(this, void 0, PromiseLike, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // error
function fn6() {
return __awaiter(this, void 0, Thenable, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
} // error
function fn7() {
return __awaiter(this, void 0, Promise, function* () { return; });
return __awaiter(this, void 0, void 0, function* () { return; });
} // valid: Promise<void>
function fn8() {
return __awaiter(this, void 0, Promise, function* () { return 1; });
return __awaiter(this, void 0, void 0, function* () { return 1; });
} // valid: Promise<number>
function fn9() {
return __awaiter(this, void 0, Promise, function* () { return null; });
return __awaiter(this, void 0, void 0, function* () { return null; });
} // valid: Promise<any>
function fn10() {
return __awaiter(this, void 0, Promise, function* () { return undefined; });
return __awaiter(this, void 0, void 0, function* () { return undefined; });
} // valid: Promise<any>
function fn11() {
return __awaiter(this, void 0, Promise, function* () { return a; });
return __awaiter(this, void 0, void 0, function* () { return a; });
} // valid: Promise<any>
function fn12() {
return __awaiter(this, void 0, Promise, function* () { return obj; });
return __awaiter(this, void 0, void 0, function* () { return obj; });
} // valid: Promise<{ then: string; }>
function fn13() {
return __awaiter(this, void 0, Promise, function* () { return thenable; });
return __awaiter(this, void 0, void 0, function* () { return thenable; });
} // error
function fn14() {
return __awaiter(this, void 0, Promise, function* () { yield 1; });
return __awaiter(this, void 0, void 0, function* () { yield 1; });
} // valid: Promise<void>
function fn15() {
return __awaiter(this, void 0, Promise, function* () { yield null; });
return __awaiter(this, void 0, void 0, function* () { yield null; });
} // valid: Promise<void>
function fn16() {
return __awaiter(this, void 0, Promise, function* () { yield undefined; });
return __awaiter(this, void 0, void 0, function* () { yield undefined; });
} // valid: Promise<void>
function fn17() {
return __awaiter(this, void 0, Promise, function* () { yield a; });
return __awaiter(this, void 0, void 0, function* () { yield a; });
} // valid: Promise<void>
function fn18() {
return __awaiter(this, void 0, Promise, function* () { yield obj; });
return __awaiter(this, void 0, void 0, function* () { yield obj; });
} // valid: Promise<void>
function fn19() {
return __awaiter(this, void 0, Promise, function* () { yield thenable; });
return __awaiter(this, void 0, void 0, function* () { yield thenable; });
} // error
@@ -4,6 +4,6 @@ async function foo(): Promise<void> {
//// [asyncFunctionDeclaration1_es6.js]
function foo() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
@@ -4,6 +4,6 @@ async function foo(a = await): Promise<void> {
//// [asyncFunctionDeclaration6_es6.js]
function foo(a = yield ) {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
@@ -7,10 +7,10 @@ async function bar(): Promise<void> {
//// [asyncFunctionDeclaration7_es6.js]
function bar() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
// 'await' here is an identifier, and not a yield expression.
function foo(a = yield ) {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
});
@@ -5,7 +5,7 @@ async function foo(): Promise<void> {
//// [asyncFunctionDeclaration9_es6.js]
function foo() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
var v = { [yield ]: foo };
});
}
@@ -17,7 +17,7 @@ export const b = {
//// [b.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -26,13 +26,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
};
import { a } from './a';
export const b = {
f: () => __awaiter(this, void 0, Promise, function* () {
f: () => __awaiter(this, void 0, void 0, function* () {
yield a.f();
})
};
//// [a.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -41,7 +41,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
};
import { b } from './b';
export const a = {
f: () => __awaiter(this, void 0, Promise, function* () {
f: () => __awaiter(this, void 0, void 0, function* () {
yield b.f();
})
};
@@ -0,0 +1,13 @@
tests/cases/conformance/async/es6/test.ts(3,25): error TS1064: The return type of an async function or method must be the global Promise<T> type.
==== tests/cases/conformance/async/es6/task.ts (0 errors) ====
export class Task<T> extends Promise<T> { }
==== tests/cases/conformance/async/es6/test.ts (1 errors) ====
import { Task } from "./task";
class Test {
async example<T>(): Task<T> { return; }
~~~~~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
}
@@ -17,16 +17,15 @@ exports.Task = Task;
//// [test.js]
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments)).next());
});
};
const task_1 = require("./task");
class Test {
example() {
return __awaiter(this, void 0, task_1.Task, function* () { return; });
return __awaiter(this, void 0, void 0, function* () { return; });
}
}
@@ -1,20 +0,0 @@
=== tests/cases/conformance/async/es6/task.ts ===
export class Task<T> extends Promise<T> { }
>Task : Symbol(Task, Decl(task.ts, 0, 0))
>T : Symbol(T, Decl(task.ts, 0, 18))
>Promise : Symbol(Promise, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(task.ts, 0, 18))
=== tests/cases/conformance/async/es6/test.ts ===
import { Task } from "./task";
>Task : Symbol(Task, Decl(test.ts, 0, 8))
class Test {
>Test : Symbol(Test, Decl(test.ts, 0, 30))
async example<T>(): Task<T> { return; }
>example : Symbol(example, Decl(test.ts, 1, 12))
>T : Symbol(T, Decl(test.ts, 2, 18))
>Task : Symbol(Task, Decl(test.ts, 0, 8))
>T : Symbol(T, Decl(test.ts, 2, 18))
}
@@ -1,20 +0,0 @@
=== tests/cases/conformance/async/es6/task.ts ===
export class Task<T> extends Promise<T> { }
>Task : Task<T>
>T : T
>Promise : Promise<T>
>T : T
=== tests/cases/conformance/async/es6/test.ts ===
import { Task } from "./task";
>Task : typeof Task
class Test {
>Test : Test
async example<T>(): Task<T> { return; }
>example : <T>() => Task<T>
>T : T
>Task : Task<T>
>T : T
}
@@ -59,7 +59,7 @@ class B extends A {
// async method with only call/get on 'super' does not require a binding
simple() {
const _super = name => super[name];
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
// call with property access
_super("x").call(this);
// call with element access
@@ -76,7 +76,7 @@ class B extends A {
const cache = Object.create(null);
return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });
})(name => super[name], (name, value) => super[name] = value);
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
const f = () => { };
// call with property access
_super("x").value.call(this);
+2 -2
View File
@@ -7,7 +7,7 @@ function g() { }
//// [a.js]
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new P(function (resolve, reject) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
@@ -15,7 +15,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
});
};
function f() {
return __awaiter(this, void 0, Promise, function* () { });
return __awaiter(this, void 0, void 0, function* () { });
}
//// [b.js]
function g() { }
@@ -0,0 +1,13 @@
tests/cases/conformance/async/es6/asyncQualifiedReturnType_es6.ts(6,21): error TS1064: The return type of an async function or method must be the global Promise<T> type.
==== tests/cases/conformance/async/es6/asyncQualifiedReturnType_es6.ts (1 errors) ====
namespace X {
export class MyPromise<T> extends Promise<T> {
}
}
async function f(): X.MyPromise<void> {
~~~~~~~~~~~~~~~~~
!!! error TS1064: The return type of an async function or method must be the global Promise<T> type.
}
@@ -15,6 +15,6 @@ var X;
X.MyPromise = MyPromise;
})(X || (X = {}));
function f() {
return __awaiter(this, void 0, X.MyPromise, function* () {
return __awaiter(this, void 0, void 0, function* () {
});
}
@@ -1,17 +0,0 @@
=== tests/cases/conformance/async/es6/asyncQualifiedReturnType_es6.ts ===
namespace X {
>X : Symbol(X, Decl(asyncQualifiedReturnType_es6.ts, 0, 0))
export class MyPromise<T> extends Promise<T> {
>MyPromise : Symbol(MyPromise, Decl(asyncQualifiedReturnType_es6.ts, 0, 13))
>T : Symbol(T, Decl(asyncQualifiedReturnType_es6.ts, 1, 27))
>Promise : Symbol(Promise, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
>T : Symbol(T, Decl(asyncQualifiedReturnType_es6.ts, 1, 27))
}
}
async function f(): X.MyPromise<void> {
>f : Symbol(f, Decl(asyncQualifiedReturnType_es6.ts, 3, 1))
>X : Symbol(X, Decl(asyncQualifiedReturnType_es6.ts, 0, 0))
>MyPromise : Symbol(X.MyPromise, Decl(asyncQualifiedReturnType_es6.ts, 0, 13))
}
@@ -1,17 +0,0 @@
=== tests/cases/conformance/async/es6/asyncQualifiedReturnType_es6.ts ===
namespace X {
>X : typeof X
export class MyPromise<T> extends Promise<T> {
>MyPromise : MyPromise<T>
>T : T
>Promise : Promise<T>
>T : T
}
}
async function f(): X.MyPromise<void> {
>f : () => X.MyPromise<void>
>X : any
>MyPromise : X.MyPromise<T>
}
@@ -9,7 +9,7 @@ async function func(): Promise<void> {
//// [awaitBinaryExpression1_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = (yield p) || a;
"after";
@@ -9,7 +9,7 @@ async function func(): Promise<void> {
//// [awaitBinaryExpression2_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = (yield p) && a;
"after";
@@ -9,7 +9,7 @@ async function func(): Promise<void> {
//// [awaitBinaryExpression3_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = (yield p) + a;
"after";
@@ -9,7 +9,7 @@ async function func(): Promise<void> {
//// [awaitBinaryExpression4_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = yield p, a;
"after";
@@ -10,7 +10,7 @@ async function func(): Promise<void> {
//// [awaitBinaryExpression5_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var o;
o.a = yield p;
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression1_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = fn(a, a, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression2_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = fn(yield p, a, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression3_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = fn(a, yield p, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression4_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = (yield pfn)(a, a, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression5_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = o.fn(a, a, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression6_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = o.fn(yield p, a, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression7_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = o.fn(a, yield p, a);
"after";
@@ -13,7 +13,7 @@ async function func(): Promise<void> {
//// [awaitCallExpression8_es6.js]
function func() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
"before";
var b = (yield po).fn(a, a, a);
"after";
+1 -1
View File
@@ -14,7 +14,7 @@ async function f() {
//// [awaitUnion_es6.js]
function f() {
return __awaiter(this, void 0, Promise, function* () {
return __awaiter(this, void 0, void 0, function* () {
let await_a = yield a;
let await_b = yield b;
let await_c = yield c;
@@ -1,9 +1,9 @@
tests/cases/compiler/baseCheck.ts(9,18): error TS2304: Cannot find name 'loc'.
tests/cases/compiler/baseCheck.ts(17,53): error TS2346: Supplied parameters do not match any signature of call target.
tests/cases/compiler/baseCheck.ts(17,59): error TS2332: 'this' cannot be referenced in current location.
tests/cases/compiler/baseCheck.ts(18,62): error TS2332: 'this' cannot be referenced in current location.
tests/cases/compiler/baseCheck.ts(17,59): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
tests/cases/compiler/baseCheck.ts(18,62): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
tests/cases/compiler/baseCheck.ts(19,59): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
tests/cases/compiler/baseCheck.ts(19,68): error TS2332: 'this' cannot be referenced in current location.
tests/cases/compiler/baseCheck.ts(19,68): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
tests/cases/compiler/baseCheck.ts(22,9): error TS2304: Cannot find name 'x'.
tests/cases/compiler/baseCheck.ts(23,7): error TS2304: Cannot find name 'x'.
tests/cases/compiler/baseCheck.ts(26,9): error TS2304: Cannot find name 'x'.
@@ -32,15 +32,15 @@ tests/cases/compiler/baseCheck.ts(26,9): error TS2304: Cannot find name 'x'.
~~~~~~~~~~~~~
!!! error TS2346: Supplied parameters do not match any signature of call target.
~~~~
!!! error TS2332: 'this' cannot be referenced in current location.
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
class E extends C { constructor(public z: number) { super(0, this.z) } }
~~~~
!!! error TS2332: 'this' cannot be referenced in current location.
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
class F extends C { constructor(public z: number) { super("hello", this.z) } } // first param type
~~~~~~~
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
~~~~
!!! error TS2332: 'this' cannot be referenced in current location.
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
function f() {
if (x<10) {
+4 -1
View File
@@ -4,6 +4,7 @@ tests/cases/compiler/bases.ts(7,17): error TS2304: Cannot find name 'any'.
tests/cases/compiler/bases.ts(11,7): error TS2420: Class 'C' incorrectly implements interface 'I'.
Property 'x' is missing in type 'C'.
tests/cases/compiler/bases.ts(12,5): error TS2377: Constructors for derived classes must contain a 'super' call.
tests/cases/compiler/bases.ts(13,9): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
tests/cases/compiler/bases.ts(13,14): error TS2339: Property 'x' does not exist on type 'C'.
tests/cases/compiler/bases.ts(13,15): error TS1005: ';' expected.
tests/cases/compiler/bases.ts(13,17): error TS2304: Cannot find name 'any'.
@@ -11,7 +12,7 @@ tests/cases/compiler/bases.ts(17,9): error TS2339: Property 'x' does not exist o
tests/cases/compiler/bases.ts(18,9): error TS2339: Property 'y' does not exist on type 'C'.
==== tests/cases/compiler/bases.ts (10 errors) ====
==== tests/cases/compiler/bases.ts (11 errors) ====
interface I {
x;
}
@@ -36,6 +37,8 @@ tests/cases/compiler/bases.ts(18,9): error TS2339: Property 'y' does not exist o
~~~~~~~~~~~~~~~
this.x: any;
~~~~~~~~~~~~~~~~~~~~
~~~~
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
~
!!! error TS2339: Property 'x' does not exist on type 'C'.
~
@@ -144,8 +144,9 @@ for (const y = 0; y < 1;) {
//// [capturedLetConstInLoop4.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var v0, v00, v1, v2, v3, v4, v5, v6, v7, v8, v0_c, v00_c, v1_c, v2_c, v3_c, v4_c, v5_c, v6_c, v7_c, v8_c;
//======let
function exportedFoo() {
@@ -0,0 +1,33 @@
//// [checkSuperCallBeforeThisAccessing1.ts]
class Based { }
class Derived extends Based {
public x: number;
constructor() {
super();
this;
this.x = 10;
var that = this;
}
}
//// [checkSuperCallBeforeThisAccessing1.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Based = (function () {
function Based() {
}
return Based;
}());
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
_super.call(this);
this;
this.x = 10;
var that = this;
}
return Derived;
}(Based));
@@ -0,0 +1,28 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing1.ts ===
class Based { }
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 0))
class Derived extends Based {
>Derived : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 15))
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 0))
public x: number;
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing1.ts, 1, 29))
constructor() {
super();
>super : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 0))
this;
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 15))
this.x = 10;
>this.x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing1.ts, 1, 29))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 15))
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing1.ts, 1, 29))
var that = this;
>that : Symbol(that, Decl(checkSuperCallBeforeThisAccessing1.ts, 7, 11))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing1.ts, 0, 15))
}
}
@@ -0,0 +1,31 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing1.ts ===
class Based { }
>Based : Based
class Derived extends Based {
>Derived : Derived
>Based : Based
public x: number;
>x : number
constructor() {
super();
>super() : void
>super : typeof Based
this;
>this : this
this.x = 10;
>this.x = 10 : number
>this.x : number
>this : this
>x : number
>10 : number
var that = this;
>that : this
>this : this
}
}
@@ -0,0 +1,16 @@
tests/cases/compiler/checkSuperCallBeforeThisAccessing2.ts(5,9): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
==== tests/cases/compiler/checkSuperCallBeforeThisAccessing2.ts (1 errors) ====
class Based { }
class Derived extends Based {
public x: number;
constructor() {
this.x = 100;
~~~~
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
super();
this.x = 10;
var that = this;
}
}
@@ -0,0 +1,33 @@
//// [checkSuperCallBeforeThisAccessing2.ts]
class Based { }
class Derived extends Based {
public x: number;
constructor() {
this.x = 100;
super();
this.x = 10;
var that = this;
}
}
//// [checkSuperCallBeforeThisAccessing2.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Based = (function () {
function Based() {
}
return Based;
}());
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
this.x = 100;
_super.call(this);
this.x = 10;
var that = this;
}
return Derived;
}(Based));
@@ -0,0 +1,43 @@
//// [checkSuperCallBeforeThisAccessing3.ts]
class Based { }
class Derived extends Based {
public x: number;
constructor() {
class innver {
public y: boolean;
constructor() {
this.y = true;
}
}
super();
this.x = 10;
var that = this;
}
}
//// [checkSuperCallBeforeThisAccessing3.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Based = (function () {
function Based() {
}
return Based;
}());
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
var innver = (function () {
function innver() {
this.y = true;
}
return innver;
}());
_super.call(this);
this.x = 10;
var that = this;
}
return Derived;
}(Based));
@@ -0,0 +1,38 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing3.ts ===
class Based { }
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 0))
class Derived extends Based {
>Derived : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 15))
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 0))
public x: number;
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing3.ts, 1, 29))
constructor() {
class innver {
>innver : Symbol(innver, Decl(checkSuperCallBeforeThisAccessing3.ts, 3, 19))
public y: boolean;
>y : Symbol(y, Decl(checkSuperCallBeforeThisAccessing3.ts, 4, 22))
constructor() {
this.y = true;
>this.y : Symbol(y, Decl(checkSuperCallBeforeThisAccessing3.ts, 4, 22))
>this : Symbol(innver, Decl(checkSuperCallBeforeThisAccessing3.ts, 3, 19))
>y : Symbol(y, Decl(checkSuperCallBeforeThisAccessing3.ts, 4, 22))
}
}
super();
>super : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 0))
this.x = 10;
>this.x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing3.ts, 1, 29))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 15))
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing3.ts, 1, 29))
var that = this;
>that : Symbol(that, Decl(checkSuperCallBeforeThisAccessing3.ts, 12, 11))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing3.ts, 0, 15))
}
}
@@ -0,0 +1,43 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing3.ts ===
class Based { }
>Based : Based
class Derived extends Based {
>Derived : Derived
>Based : Based
public x: number;
>x : number
constructor() {
class innver {
>innver : innver
public y: boolean;
>y : boolean
constructor() {
this.y = true;
>this.y = true : boolean
>this.y : boolean
>this : this
>y : boolean
>true : boolean
}
}
super();
>super() : void
>super : typeof Based
this.x = 10;
>this.x = 10 : number
>this.x : number
>this : this
>x : number
>10 : number
var that = this;
>that : this
>this : this
}
}
@@ -0,0 +1,52 @@
//// [checkSuperCallBeforeThisAccessing4.ts]
class Based { }
class Derived extends Based {
public x: number;
constructor() {
(() => {
this; // No error
});
() => {
this; // No error
};
(() => {
this; // No error
})();
super();
super();
this.x = 10;
var that = this;
}
}
//// [checkSuperCallBeforeThisAccessing4.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Based = (function () {
function Based() {
}
return Based;
}());
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
var _this = this;
(function () {
_this; // No error
});
(function () {
_this; // No error
});
(function () {
_this; // No error
})();
_super.call(this);
_super.call(this);
this.x = 10;
var that = this;
}
return Derived;
}(Based));
@@ -0,0 +1,43 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing4.ts ===
class Based { }
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 0))
class Derived extends Based {
>Derived : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
>Based : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 0))
public x: number;
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing4.ts, 1, 29))
constructor() {
(() => {
this; // No error
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
});
() => {
this; // No error
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
};
(() => {
this; // No error
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
})();
super();
>super : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 0))
super();
>super : Symbol(Based, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 0))
this.x = 10;
>this.x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing4.ts, 1, 29))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
>x : Symbol(x, Decl(checkSuperCallBeforeThisAccessing4.ts, 1, 29))
var that = this;
>that : Symbol(that, Decl(checkSuperCallBeforeThisAccessing4.ts, 16, 11))
>this : Symbol(Derived, Decl(checkSuperCallBeforeThisAccessing4.ts, 0, 15))
}
}
@@ -0,0 +1,56 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing4.ts ===
class Based { }
>Based : Based
class Derived extends Based {
>Derived : Derived
>Based : Based
public x: number;
>x : number
constructor() {
(() => {
>(() => { this; // No error }) : () => void
>() => { this; // No error } : () => void
this; // No error
>this : this
});
() => {
>() => { this; // No error } : () => void
this; // No error
>this : this
};
(() => {
>(() => { this; // No error })() : void
>(() => { this; // No error }) : () => void
>() => { this; // No error } : () => void
this; // No error
>this : this
})();
super();
>super() : void
>super : typeof Based
super();
>super() : void
>super : typeof Based
this.x = 10;
>this.x = 10 : number
>this.x : number
>this : this
>x : number
>10 : number
var that = this;
>that : this
>this : this
}
}
@@ -0,0 +1,13 @@
tests/cases/compiler/checkSuperCallBeforeThisAccessing5.ts(5,15): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
==== tests/cases/compiler/checkSuperCallBeforeThisAccessing5.ts (1 errors) ====
class Based { constructor(...arg) { } }
class Derived extends Based {
public x: number;
constructor() {
super(this.x);
~~~~
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
}
}
@@ -0,0 +1,31 @@
//// [checkSuperCallBeforeThisAccessing5.ts]
class Based { constructor(...arg) { } }
class Derived extends Based {
public x: number;
constructor() {
super(this.x);
}
}
//// [checkSuperCallBeforeThisAccessing5.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Based = (function () {
function Based() {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i - 0] = arguments[_i];
}
}
return Based;
}());
var Derived = (function (_super) {
__extends(Derived, _super);
function Derived() {
_super.call(this, this.x);
}
return Derived;
}(Based));
@@ -0,0 +1,36 @@
//// [checkSuperCallBeforeThisAccessing6.ts]
class Base {
constructor(...arg) {
}
}
class Super extends Base {
constructor() {
(() => this); // No Error
super();
}
}
//// [checkSuperCallBeforeThisAccessing6.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Base = (function () {
function Base() {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i - 0] = arguments[_i];
}
}
return Base;
}());
var Super = (function (_super) {
__extends(Super, _super);
function Super() {
var _this = this;
(function () { return _this; }); // No Error
_super.call(this);
}
return Super;
}(Base));
@@ -0,0 +1,20 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing6.ts ===
class Base {
>Base : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing6.ts, 0, 0))
constructor(...arg) {
>arg : Symbol(arg, Decl(checkSuperCallBeforeThisAccessing6.ts, 1, 16))
}
}
class Super extends Base {
>Super : Symbol(Super, Decl(checkSuperCallBeforeThisAccessing6.ts, 3, 1))
>Base : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing6.ts, 0, 0))
constructor() {
(() => this); // No Error
>this : Symbol(Super, Decl(checkSuperCallBeforeThisAccessing6.ts, 3, 1))
super();
>super : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing6.ts, 0, 0))
}
}
@@ -0,0 +1,23 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing6.ts ===
class Base {
>Base : Base
constructor(...arg) {
>arg : any[]
}
}
class Super extends Base {
>Super : Super
>Base : Base
constructor() {
(() => this); // No Error
>(() => this) : () => this
>() => this : () => this
>this : this
super();
>super() : void
>super : typeof Base
}
}
@@ -0,0 +1,30 @@
//// [checkSuperCallBeforeThisAccessing7.ts]
class Base {
constructor(func: ()=>Base) {
}
}
class Super extends Base {
constructor() {
super((() => this)); // No error
}
}
//// [checkSuperCallBeforeThisAccessing7.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Base = (function () {
function Base(func) {
}
return Base;
}());
var Super = (function (_super) {
__extends(Super, _super);
function Super() {
var _this = this;
_super.call(this, (function () { return _this; })); // No error
}
return Super;
}(Base));
@@ -0,0 +1,19 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing7.ts ===
class Base {
>Base : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing7.ts, 0, 0))
constructor(func: ()=>Base) {
>func : Symbol(func, Decl(checkSuperCallBeforeThisAccessing7.ts, 1, 16))
>Base : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing7.ts, 0, 0))
}
}
class Super extends Base {
>Super : Symbol(Super, Decl(checkSuperCallBeforeThisAccessing7.ts, 3, 1))
>Base : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing7.ts, 0, 0))
constructor() {
super((() => this)); // No error
>super : Symbol(Base, Decl(checkSuperCallBeforeThisAccessing7.ts, 0, 0))
>this : Symbol(Super, Decl(checkSuperCallBeforeThisAccessing7.ts, 3, 1))
}
}
@@ -0,0 +1,22 @@
=== tests/cases/compiler/checkSuperCallBeforeThisAccessing7.ts ===
class Base {
>Base : Base
constructor(func: ()=>Base) {
>func : () => Base
>Base : Base
}
}
class Super extends Base {
>Super : Super
>Base : Base
constructor() {
super((() => this)); // No error
>super((() => this)) : void
>super : typeof Base
>(() => this) : () => this
>() => this : () => this
>this : this
}
}
@@ -0,0 +1,16 @@
tests/cases/compiler/checkSuperCallBeforeThisAccessing8.ts(7,20): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
==== tests/cases/compiler/checkSuperCallBeforeThisAccessing8.ts (1 errors) ====
class Base {
constructor(...arg) {
}
}
class Super extends Base {
constructor() {
var that = this;
~~~~
!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class.
super();
}
}
@@ -0,0 +1,35 @@
//// [checkSuperCallBeforeThisAccessing8.ts]
class Base {
constructor(...arg) {
}
}
class Super extends Base {
constructor() {
var that = this;
super();
}
}
//// [checkSuperCallBeforeThisAccessing8.js]
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Base = (function () {
function Base() {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i - 0] = arguments[_i];
}
}
return Base;
}());
var Super = (function (_super) {
__extends(Super, _super);
function Super() {
var that = this;
_super.call(this);
}
return Super;
}(Base));
+2 -2
View File
@@ -211,12 +211,12 @@ declare class a {
pgF(): void;
pv: any;
d: number;
static p2: {
static readonly p2: {
x: number;
y: number;
};
private static d2();
private static p3;
private static readonly p3;
private pv3;
private foo(n);
private foo(s);
@@ -568,8 +568,8 @@ declare var i1_c: typeof c1;
declare class cProperties {
private val;
/** getter only property*/
p1: number;
nc_p1: number;
readonly p1: number;
readonly nc_p1: number;
/**setter only property*/
p2: number;
nc_p2: number;
@@ -316,19 +316,19 @@ declare class c2 {
/** c2 c2_f1*/
c2_f1(): void;
/** c2 c2_prop*/
c2_prop: number;
readonly c2_prop: number;
c2_nc_p1: number;
c2_nc_f1(): void;
c2_nc_prop: number;
readonly c2_nc_prop: number;
/** c2 p1*/
p1: number;
/** c2 f1*/
f1(): void;
/** c2 prop*/
prop: number;
readonly prop: number;
nc_p1: number;
nc_f1(): void;
nc_prop: number;
readonly nc_prop: number;
/** c2 constructor*/
constructor(a: number);
}
@@ -339,10 +339,10 @@ declare class c3 extends c2 {
/** c3 f1*/
f1(): void;
/** c3 prop*/
prop: number;
readonly prop: number;
nc_p1: number;
nc_f1(): void;
nc_prop: number;
readonly nc_prop: number;
}
declare var c2_i: c2;
declare var c3_i: c3;
@@ -284,7 +284,7 @@ export declare class c1 {
nc_p3: number;
private nc_pp3;
static nc_s3: string;
onlyGetter: number;
readonly onlyGetter: number;
onlySetter: number;
}
//// [declFileAccessors_1.d.ts]
@@ -302,6 +302,6 @@ declare class c2 {
nc_p3: number;
private nc_pp3;
static nc_s3: string;
onlyGetter: number;
readonly onlyGetter: number;
onlySetter: number;
}
@@ -52,8 +52,8 @@ declare class C {
static y: number;
private static a();
static b(): void;
private static c;
static d: number;
private static readonly c;
static readonly d: number;
private static e;
static f: any;
}
@@ -135,7 +135,7 @@ declare class C1 {
protected static sx: number;
protected static sf(): number;
protected static staticSetter: number;
protected static staticGetter: number;
protected static readonly staticGetter: number;
}
declare class C2 extends C1 {
protected f(): number;
@@ -146,7 +146,7 @@ declare class C3 extends C2 {
static sx: number;
f(): number;
static sf(): number;
static staticGetter: number;
static readonly staticGetter: number;
}
declare class C4 {
protected a: number;
@@ -0,0 +1,21 @@
//// [tests/cases/compiler/declarationMerging1.ts] ////
//// [file1.ts]
class A {
protected _f: number;
getF() { return this._f; }
}
//// [file2.ts]
interface A {
run();
}
//// [file1.js]
var A = (function () {
function A() {
}
A.prototype.getF = function () { return this._f; };
return A;
}());
//// [file2.js]
@@ -0,0 +1,21 @@
=== tests/cases/compiler/file1.ts ===
class A {
>A : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
protected _f: number;
>_f : Symbol(_f, Decl(file1.ts, 0, 9))
getF() { return this._f; }
>getF : Symbol(getF, Decl(file1.ts, 1, 25))
>this._f : Symbol(_f, Decl(file1.ts, 0, 9))
>this : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
>_f : Symbol(_f, Decl(file1.ts, 0, 9))
}
=== tests/cases/compiler/file2.ts ===
interface A {
>A : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
run();
>run : Symbol(run, Decl(file2.ts, 0, 13))
}
@@ -0,0 +1,21 @@
=== tests/cases/compiler/file1.ts ===
class A {
>A : A
protected _f: number;
>_f : number
getF() { return this._f; }
>getF : () => number
>this._f : number
>this : this
>_f : number
}
=== tests/cases/compiler/file2.ts ===
interface A {
>A : A
run();
>run : () => any
}
@@ -0,0 +1,32 @@
//// [tests/cases/compiler/declarationMerging2.ts] ////
//// [a.ts]
export class A {
protected _f: number;
getF() { return this._f; }
}
//// [b.ts]
export {}
declare module "./a" {
interface A {
run();
}
}
//// [a.js]
define(["require", "exports"], function (require, exports) {
"use strict";
var A = (function () {
function A() {
}
A.prototype.getF = function () { return this._f; };
return A;
}());
exports.A = A;
});
//// [b.js]
define(["require", "exports"], function (require, exports) {
"use strict";
});
@@ -0,0 +1,25 @@
=== tests/cases/compiler/a.ts ===
export class A {
>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
protected _f: number;
>_f : Symbol(_f, Decl(a.ts, 1, 16))
getF() { return this._f; }
>getF : Symbol(getF, Decl(a.ts, 2, 25))
>this._f : Symbol(_f, Decl(a.ts, 1, 16))
>this : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
>_f : Symbol(_f, Decl(a.ts, 1, 16))
}
=== tests/cases/compiler/b.ts ===
export {}
declare module "./a" {
interface A {
>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
run();
>run : Symbol(run, Decl(b.ts, 2, 17))
}
}
@@ -0,0 +1,25 @@
=== tests/cases/compiler/a.ts ===
export class A {
>A : A
protected _f: number;
>_f : number
getF() { return this._f; }
>getF : () => number
>this._f : number
>this : this
>_f : number
}
=== tests/cases/compiler/b.ts ===
export {}
declare module "./a" {
interface A {
>A : A
run();
>run : () => any
}
}
@@ -13,8 +13,9 @@ var decorator: ClassDecorator;
export default class {}
//// [a.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -35,8 +36,9 @@ System.register([], function(exports_1) {
}
});
//// [b.js]
System.register([], function(exports_1) {
System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);

Some files were not shown because too many files have changed in this diff Show More