From 4e1bb26ad108c48273b2c0714d0b443ad1d686b6 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Thu, 28 Aug 2014 12:31:37 -0700 Subject: [PATCH] Print type of super --- src/compiler/checker.ts | 11 +++++------ src/harness/compilerRunner.ts | 18 +++++++++--------- src/harness/typeWriter.ts | 5 +++-- .../accessOverriddenBaseClassMember1.types | 2 ++ .../reference/captureThisInSuperCall.types | 1 + .../reference/classSideInheritance2.types | 1 + .../reference/commentsInheritance.types | 1 + .../baselines/reference/constructorArgs.types | 1 + ...orFunctionTypeIsAssignableToBaseType2.types | 2 ++ .../reference/constructorOverloads2.types | 1 + .../reference/declFileGenericType2.types | 2 ++ ...sHiddenBaseCallViaSuperPropertyAccess.types | 2 ++ .../reference/es6ClassSuperCodegenBug.types | 2 ++ .../reference/functionSubtypingOfVarArgs.types | 1 + .../functionSubtypingOfVarArgs2.types | 1 + ...lassPropertyInheritanceSpecialization.types | 1 + ...nericConstraintOnExtendedBuiltinTypes.types | 1 + ...ericConstraintOnExtendedBuiltinTypes2.types | 1 + tests/baselines/reference/super2.types | 3 +++ .../reference/superAccessInFatArrow1.types | 1 + .../reference/superCallArgsMustMatch.types | 1 + ...lFromClassThatDerivesFromGenericType1.types | 1 + ...lFromClassThatDerivesFromGenericType2.types | 1 + tests/baselines/reference/superCalls.types | 3 +++ .../reference/superInCatchBlock1.types | 1 + .../superWithGenericSpecialization.types | 1 + .../reference/superWithGenerics.types | 1 + .../baselines/reference/typeOfSuperCall.types | 1 + .../reference/validUseOfThisInSuper.types | 1 + .../reference/varArgsOnConstructorTypes.types | 1 + 30 files changed, 53 insertions(+), 17 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 1dbe0bafd91..578fbd0e054 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2238,7 +2238,6 @@ module ts { return emptyObjectType; } var type = getDeclaredTypeOfSymbol(symbol); - var name = symbol.name; if (!(type.flags & TypeFlags.ObjectType)) { error(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); return emptyObjectType; @@ -3547,7 +3546,8 @@ module ts { return false; } - function checkSuperExpression(node: Node, isCallExpression: boolean): Type { + function checkSuperExpression(node: Node): Type { + var isCallExpression = node.parent.kind === SyntaxKind.CallExpression && (node.parent).func === node; var enclosingClass = getAncestor(node, SyntaxKind.ClassDeclaration); var baseClass: Type; if (enclosingClass && enclosingClass.baseType) { @@ -4181,7 +4181,7 @@ module ts { function resolveCallExpression(node: CallExpression): Signature { if (node.func.kind === SyntaxKind.SuperKeyword) { - var superType = checkSuperExpression(node.func, true); + var superType = checkSuperExpression(node.func); if (superType !== unknownType) { return resolveCall(node, getSignaturesOfType(superType, SignatureKind.Construct)); } @@ -4829,7 +4829,7 @@ module ts { case SyntaxKind.ThisKeyword: return checkThisExpression(node); case SyntaxKind.SuperKeyword: - return checkSuperExpression(node, false); + return checkSuperExpression(node); case SyntaxKind.NullKeyword: return nullType; case SyntaxKind.TrueKeyword: @@ -6940,8 +6940,7 @@ module ts { } if (isInRightSideOfImportOrExportAssignment(node)) { - var symbol: Symbol; - symbol = getSymbolInfo(node); + var symbol = getSymbolInfo(node); var declaredType = getDeclaredTypeOfSymbol(symbol); return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); } diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index b81a6f12ecf..60da87b1dfc 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -41,16 +41,16 @@ class CompilerBaselineRunner extends RunnerBase { describe('compiler tests for ' + fileName, () => { // Mocha holds onto the closure environment of the describe callback even after the test is done. // Everything declared here should be cleared out in the "after" callback. - var justName = fileName.replace(/^.*[\\\/]/, ''); // strips the fileName from the path. - var content = Harness.IO.readFile(fileName); - var testCaseContent = Harness.TestCaseParser.makeUnitsFromTest(content, fileName); + var justName: string; + var content: string; + var testCaseContent: { settings: Harness.TestCaseParser.CompilerSetting[]; testUnitData: Harness.TestCaseParser.TestUnitData[]; } - var units = testCaseContent.testUnitData; - var tcSettings = testCaseContent.settings; - var createNewInstance = false; + var units: Harness.TestCaseParser.TestUnitData[]; + var tcSettings: Harness.TestCaseParser.CompilerSetting[]; + var createNewInstance: boolean; - var lastUnit = units[units.length - 1]; - var rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/'; + var lastUnit: Harness.TestCaseParser.TestUnitData; + var rootDir: string; var result: Harness.Compiler.CompilerResult; var checker: ts.TypeChecker; @@ -315,7 +315,7 @@ class CompilerBaselineRunner extends RunnerBase { allFiles.forEach(file => { var codeLines = file.content.split('\n'); walker.getTypes(file.unitName).forEach(result => { - var formattedLine = result.identifierName.replace(/\r?\n/g, "") + " : " + result.type; + var formattedLine = result.sourceText.replace(/\r?\n/g, "") + " : " + result.type; if (!typeMap[file.unitName]) { typeMap[file.unitName] = {}; } diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index 58b4f9e3a13..85a5b13c54c 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -2,7 +2,7 @@ interface TypeWriterResult { line: number; column: number; syntaxKind: string; - identifierName: string; + sourceText: string; type: string; } @@ -28,6 +28,7 @@ class TypeWriterWalker { // TODO: Ideally we should log all expressions, but to compare to the // old typeWriter baselines, suppress tokens case ts.SyntaxKind.ThisKeyword: + case ts.SyntaxKind.SuperKeyword: // case ts.SyntaxKind.RegularExpressionLiteral: case ts.SyntaxKind.ArrayLiteral: case ts.SyntaxKind.ObjectLiteral: @@ -92,7 +93,7 @@ class TypeWriterWalker { line: lineAndCharacter.line - 1, column: lineAndCharacter.character, syntaxKind: ts.SyntaxKind[node.kind], - identifierName: sourceText, + sourceText: sourceText, type: isUnknownType ? this.checker.symbolToString(symbol, node.parent, ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace | ts.SymbolFlags.Import) : this.checker.typeToString(type, node.parent, ts.TypeFormatFlags.UseTypeOfFunction | writeArrayAsGenericType) diff --git a/tests/baselines/reference/accessOverriddenBaseClassMember1.types b/tests/baselines/reference/accessOverriddenBaseClassMember1.types index 89701992cae..15007cebf4c 100644 --- a/tests/baselines/reference/accessOverriddenBaseClassMember1.types +++ b/tests/baselines/reference/accessOverriddenBaseClassMember1.types @@ -32,6 +32,7 @@ class ColoredPoint extends Point { super(x, y); >super(x, y) : void +>super : typeof Point >x : number >y : number } @@ -43,6 +44,7 @@ class ColoredPoint extends Point { >super.toString() + " color=" : string >super.toString() : string >super.toString : () => string +>super : Point >toString : () => string >this.color : string >this : ColoredPoint diff --git a/tests/baselines/reference/captureThisInSuperCall.types b/tests/baselines/reference/captureThisInSuperCall.types index dc11b56ada2..faa7d2ad97e 100644 --- a/tests/baselines/reference/captureThisInSuperCall.types +++ b/tests/baselines/reference/captureThisInSuperCall.types @@ -12,6 +12,7 @@ class B extends A { constructor() { super({ test: () => this.someMethod()}); } >super({ test: () => this.someMethod()}) : void +>super : typeof A >{ test: () => this.someMethod()} : { test: () => void; } >test : () => void >() => this.someMethod() : () => void diff --git a/tests/baselines/reference/classSideInheritance2.types b/tests/baselines/reference/classSideInheritance2.types index 8f89cca44bd..9c2d632ebbb 100644 --- a/tests/baselines/reference/classSideInheritance2.types +++ b/tests/baselines/reference/classSideInheritance2.types @@ -21,6 +21,7 @@ class SubText extends TextBase { super(); >super() : void +>super : typeof TextBase } } diff --git a/tests/baselines/reference/commentsInheritance.types b/tests/baselines/reference/commentsInheritance.types index 5fc9a564cf1..b4db5767107 100644 --- a/tests/baselines/reference/commentsInheritance.types +++ b/tests/baselines/reference/commentsInheritance.types @@ -178,6 +178,7 @@ class c3 extends c2 { constructor() { super(10); >super(10) : void +>super : typeof c2 } /** c3 p1*/ public p1: number; diff --git a/tests/baselines/reference/constructorArgs.types b/tests/baselines/reference/constructorArgs.types index 14971ac935f..ccd23c22f5d 100644 --- a/tests/baselines/reference/constructorArgs.types +++ b/tests/baselines/reference/constructorArgs.types @@ -24,6 +24,7 @@ class Sub extends Super { super(options.value); >super(options.value) : void +>super : typeof Super >options.value : number >options : Options >value : number diff --git a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types index b9fccd0efea..53853163827 100644 --- a/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types +++ b/tests/baselines/reference/constructorFunctionTypeIsAssignableToBaseType2.types @@ -34,6 +34,7 @@ class Derived extends Base { super(x); >super(x) : void +>super : typeof Base >x : number } } @@ -55,6 +56,7 @@ class Derived2 extends Base { super(x); >super(x) : void +>super : typeof Base >x : any return 1; diff --git a/tests/baselines/reference/constructorOverloads2.types b/tests/baselines/reference/constructorOverloads2.types index fc5b97723b4..65da67f04fe 100644 --- a/tests/baselines/reference/constructorOverloads2.types +++ b/tests/baselines/reference/constructorOverloads2.types @@ -34,6 +34,7 @@ class Foo extends FooBase { super(x); >super(x) : void +>super : typeof FooBase >x : any } bar1() { /*WScript.Echo("bar1");*/ } diff --git a/tests/baselines/reference/declFileGenericType2.types b/tests/baselines/reference/declFileGenericType2.types index 14125855b36..b8b43503dc0 100644 --- a/tests/baselines/reference/declFileGenericType2.types +++ b/tests/baselines/reference/declFileGenericType2.types @@ -92,6 +92,7 @@ module templa.dom.mvc { constructor() { super(); >super() : void +>super : typeof templa.mvc.AbstractController } } } @@ -127,6 +128,7 @@ module templa.dom.mvc.composite { constructor() { super(); >super() : void +>super : typeof AbstractElementController this._controllers = []; >this._controllers = [] : templa.mvc.IController[] diff --git a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types index e9a24afdba2..4f1ff1780dc 100644 --- a/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types +++ b/tests/baselines/reference/derivedTypeAccessesHiddenBaseCallViaSuperPropertyAccess.types @@ -34,6 +34,7 @@ class Derived extends Base { >r : { a: number; } >super.foo({ a: 1 }) : { a: number; } >super.foo : (x: { a: number; }) => { a: number; } +>super : Base >foo : (x: { a: number; }) => { a: number; } >{ a: 1 } : { a: number; } >a : number @@ -42,6 +43,7 @@ class Derived extends Base { >r2 : { a: number; } >super.foo({ a: 1, b: 2 }) : { a: number; } >super.foo : (x: { a: number; }) => { a: number; } +>super : Base >foo : (x: { a: number; }) => { a: number; } >{ a: 1, b: 2 } : { a: number; b: number; } >a : number diff --git a/tests/baselines/reference/es6ClassSuperCodegenBug.types b/tests/baselines/reference/es6ClassSuperCodegenBug.types index 2c74789b587..7b8a4abadfe 100644 --- a/tests/baselines/reference/es6ClassSuperCodegenBug.types +++ b/tests/baselines/reference/es6ClassSuperCodegenBug.types @@ -14,10 +14,12 @@ class B extends A { if (true) { super('a1', 'b1'); >super('a1', 'b1') : void +>super : typeof A } else { super('a2', 'b2'); >super('a2', 'b2') : void +>super : typeof A } } } diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs.types b/tests/baselines/reference/functionSubtypingOfVarArgs.types index ab048380ae5..ebd706e94cf 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs.types @@ -34,6 +34,7 @@ class StringEvent extends EventBase { // should work super.add(listener); >super.add(listener) : void >super.add : (listener: (...args: any[]) => void) => void +>super : EventBase >add : (listener: (...args: any[]) => void) => void >listener : (items: string) => void } diff --git a/tests/baselines/reference/functionSubtypingOfVarArgs2.types b/tests/baselines/reference/functionSubtypingOfVarArgs2.types index 3aeec10f271..2fef933594d 100644 --- a/tests/baselines/reference/functionSubtypingOfVarArgs2.types +++ b/tests/baselines/reference/functionSubtypingOfVarArgs2.types @@ -36,6 +36,7 @@ class StringEvent extends EventBase { super.add(listener); >super.add(listener) : void >super.add : (listener: (...args: any[]) => void) => void +>super : EventBase >add : (listener: (...args: any[]) => void) => void >listener : (items: string, moreitems: number) => void } diff --git a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types index 46cec5f6b83..5337c6cf6b3 100644 --- a/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types +++ b/tests/baselines/reference/genericClassPropertyInheritanceSpecialization.types @@ -202,6 +202,7 @@ module PortalFx.ViewModels.Controls.Validators { super(message); >super(message) : void +>super : typeof Portal.Controls.Validators.Validator >message : string } } diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types index 61fbea7b1ee..e7e6be5f7bb 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes.types @@ -59,6 +59,7 @@ module EndGate.Tweening { super(from); >super(from) : void +>super : typeof Tween >from : number } } diff --git a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types index 3a5c24a772f..8f872e71b0d 100644 --- a/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types +++ b/tests/baselines/reference/genericConstraintOnExtendedBuiltinTypes2.types @@ -59,6 +59,7 @@ module EndGate.Tweening { super(from); >super(from) : void +>super : typeof Tween >from : number } } diff --git a/tests/baselines/reference/super2.types b/tests/baselines/reference/super2.types index 92b5be42044..86fb33227de 100644 --- a/tests/baselines/reference/super2.types +++ b/tests/baselines/reference/super2.types @@ -37,6 +37,7 @@ class SubSub5 extends Sub5 { return super.x(); >super.x() : string >super.x : () => string +>super : Sub5 >x : () => string } public y() { @@ -45,6 +46,7 @@ class SubSub5 extends Sub5 { return super.y(); >super.y() : string >super.y : () => string +>super : Sub5 >y : () => string } } @@ -81,6 +83,7 @@ class SubSub6 extends Sub6 { return super.y(); >super.y() : string >super.y : () => string +>super : Sub6 >y : () => string } } diff --git a/tests/baselines/reference/superAccessInFatArrow1.types b/tests/baselines/reference/superAccessInFatArrow1.types index 882967d920d..d6c613e63f5 100644 --- a/tests/baselines/reference/superAccessInFatArrow1.types +++ b/tests/baselines/reference/superAccessInFatArrow1.types @@ -30,6 +30,7 @@ module test { super.foo(); >super.foo() : void >super.foo : () => void +>super : A >foo : () => void }); diff --git a/tests/baselines/reference/superCallArgsMustMatch.types b/tests/baselines/reference/superCallArgsMustMatch.types index 6f5637edd1a..c2019881d94 100644 --- a/tests/baselines/reference/superCallArgsMustMatch.types +++ b/tests/baselines/reference/superCallArgsMustMatch.types @@ -23,6 +23,7 @@ class T6 extends T5{ super("hi"); // Should error, base constructor has type T for first arg, which is fixed as number in the extends clause >super("hi") : void +>super : typeof T5 var x: number = this.foo; >x : number diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types index e125522bbb7..7630d67606a 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType1.types @@ -21,6 +21,7 @@ class D extends B { constructor() { super(); >super() : void +>super : typeof B } } diff --git a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types index 0aa1487543f..cd26719d22e 100644 --- a/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types +++ b/tests/baselines/reference/superCallFromClassThatDerivesFromGenericType2.types @@ -17,6 +17,7 @@ class D extends B { constructor() { super(); >super() : void +>super : typeof B } } diff --git a/tests/baselines/reference/superCalls.types b/tests/baselines/reference/superCalls.types index bc22cc734d2..fcb0ef045bc 100644 --- a/tests/baselines/reference/superCalls.types +++ b/tests/baselines/reference/superCalls.types @@ -24,11 +24,13 @@ class Derived extends Base { super(''); >super('') : void +>super : typeof Base //type of super call expression is void var p = super(''); >p : void >super('') : void +>super : typeof Base var p = v(); >p : void @@ -52,6 +54,7 @@ class OtherDerived extends OtherBase { super(); >super() : void +>super : typeof OtherBase } } diff --git a/tests/baselines/reference/superInCatchBlock1.types b/tests/baselines/reference/superInCatchBlock1.types index f7592c18486..616c11cee7f 100644 --- a/tests/baselines/reference/superInCatchBlock1.types +++ b/tests/baselines/reference/superInCatchBlock1.types @@ -20,6 +20,7 @@ class B extends A { super.m(); >super.m() : void >super.m : () => void +>super : A >m : () => void } } diff --git a/tests/baselines/reference/superWithGenericSpecialization.types b/tests/baselines/reference/superWithGenericSpecialization.types index 1b9190176e8..258615b309f 100644 --- a/tests/baselines/reference/superWithGenericSpecialization.types +++ b/tests/baselines/reference/superWithGenericSpecialization.types @@ -20,6 +20,7 @@ class D extends C { constructor() { super(); // uses the type parameter type of the base class, ie string >super() : void +>super : typeof C } } diff --git a/tests/baselines/reference/superWithGenerics.types b/tests/baselines/reference/superWithGenerics.types index 89086033284..3a034b67f04 100644 --- a/tests/baselines/reference/superWithGenerics.types +++ b/tests/baselines/reference/superWithGenerics.types @@ -21,6 +21,7 @@ class D extends B { constructor() { super(); >super() : void +>super : typeof B } } diff --git a/tests/baselines/reference/typeOfSuperCall.types b/tests/baselines/reference/typeOfSuperCall.types index fdd8120f7d3..92108bedc15 100644 --- a/tests/baselines/reference/typeOfSuperCall.types +++ b/tests/baselines/reference/typeOfSuperCall.types @@ -11,5 +11,6 @@ class D extends C { var x: void = super(); >x : void >super() : void +>super : typeof C } } diff --git a/tests/baselines/reference/validUseOfThisInSuper.types b/tests/baselines/reference/validUseOfThisInSuper.types index 5c484ca33f0..d7c882496e2 100644 --- a/tests/baselines/reference/validUseOfThisInSuper.types +++ b/tests/baselines/reference/validUseOfThisInSuper.types @@ -14,6 +14,7 @@ class Super extends Base { constructor() { super((() => this)()); // ok since this is not the case: The constructor declares parameter properties or the containing class declares instance member variables with initializers. >super((() => this)()) : void +>super : typeof Base >(() => this)() : Super >(() => this) : () => Super >() => this : () => Super diff --git a/tests/baselines/reference/varArgsOnConstructorTypes.types b/tests/baselines/reference/varArgsOnConstructorTypes.types index 7cfc1df66f3..17993a32fda 100644 --- a/tests/baselines/reference/varArgsOnConstructorTypes.types +++ b/tests/baselines/reference/varArgsOnConstructorTypes.types @@ -22,6 +22,7 @@ export class B extends A { super(element); >super(element) : void +>super : typeof A >element : any this.p1 = element;