From 5a7500ca5e62d7e6c7863cf42d156e8bcdc3017c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 2 Dec 2014 16:09:41 -0800 Subject: [PATCH] Add a dedicated 'EndOfFile' token to a SourceFile. This is important for incremental parsing, as it is where we can attach parse errors at the end of the file to. Also, it helps with things like emitting comments at the end of the file. --- src/compiler/emitter.ts | 3 + src/compiler/parser.ts | 7 +- src/compiler/types.ts | 1 + src/services/services.ts | 4 +- .../reference/anyAssignableToEveryType.js | 5 + .../reference/augmentedTypesClass3.js | 1 + .../baselines/reference/augmentedTypesEnum.js | 3 + .../reference/augmentedTypesEnum2.js | 2 + .../reference/augmentedTypesFunction.js | 3 + .../reference/augmentedTypesInterface.js | 1 + .../reference/augmentedTypesModules.js | 1 + .../baselines/reference/augmentedTypesVar.js | 3 + .../reference/baseIndexSignatureResolution.js | 34 +++ .../reference/commentEmitAtEndOfFile1.js | 22 ++ .../reference/commentEmitAtEndOfFile1.types | 17 ++ .../reference/commentsAtEndOfFile1.js | 1 + ...peratorWithSubtypeObjectOnCallSignature.js | 1 + ...WithSubtypeObjectOnConstructorSignature.js | 1 + ...ubtypeObjectOnInstantiatedCallSignature.js | 1 + ...bjectOnInstantiatedConstructorSignature.js | 1 + tests/baselines/reference/concatError.js | 45 ++++ .../reference/conformanceFunctionOverloads.js | 10 + .../reference/emitCommentsOnlyFile.js | 26 +++ tests/baselines/reference/emitPostComments.js | 26 +++ tests/baselines/reference/emitPreComments.js | 26 +++ tests/baselines/reference/errorSupression1.js | 1 + .../reference/everyTypeAssignableToAny.js | 5 + .../functionConstraintSatisfaction.js | 4 + ...CallWithObjectTypeArgsAndNumericIndexer.js | 7 + ...cCallWithObjectTypeArgsAndStringIndexer.js | 7 + .../reference/heterogeneousArrayLiterals.js | 25 ++ .../innerTypeParameterShadowingOuterOne.js | 8 + .../innerTypeParameterShadowingOuterOne2.js | 10 + .../baselines/reference/moduleIdentifiers.js | 2 + .../reference/nullAssignableToEveryType.js | 5 + .../reference/parserS7.6.1.1_A1.10.js | 8 + .../reference/parserSyntaxWalker.generated.js | 217 ++++++++++++++++++ ...sivelySpecializedConstructorDeclaration.js | 41 ++++ .../baselines/reference/sourceMap-Comment1.js | 1 + .../reference/sourceMap-Comment1.js.map | 2 +- .../sourceMap-Comment1.sourcemap.txt | 13 ++ .../reference/typeParameterAsTypeArgument.js | 10 + ...ParameterUsedAsTypeParameterConstraint3.js | 12 + .../undefinedAssignableToEveryType.js | 5 + tests/baselines/reference/witness.js | 1 + .../cases/compiler/commentEmitAtEndOfFile1.ts | 10 + 46 files changed, 636 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/commentEmitAtEndOfFile1.js create mode 100644 tests/baselines/reference/commentEmitAtEndOfFile1.types create mode 100644 tests/cases/compiler/commentEmitAtEndOfFile1.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index b39f58dde0e..7193523bf96 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3443,6 +3443,7 @@ module ts { // Start new file on new line writeLine(); emitDetachedComments(node); + // emit prologue directives prior to __extends var startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ false); if (!extendsEmitted && resolver.getNodeCheckFlags(node) & NodeCheckFlags.EmitExtends) { @@ -3474,6 +3475,8 @@ module ts { emitCaptureThisForNodeIfNecessary(node); emitLinesStartingAt(node.statements, startIndex); } + + emitLeadingComments(node.endOfFileToken); } function emitNode(node: Node): void { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index aa2a8d5ec4c..06980e19187 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -313,8 +313,10 @@ module ts { case SyntaxKind.FinallyBlock: case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: - case SyntaxKind.SourceFile: return children((node).statements); + case SyntaxKind.SourceFile: + return children((node).statements) || + child((node).endOfFileToken); case SyntaxKind.VariableStatement: return children(node.modifiers) || children((node).declarations); @@ -4294,6 +4296,9 @@ module ts { sourceFile.amdModuleName = referenceComments.amdModuleName; sourceFile.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseSourceElement); + Debug.assert(token === SyntaxKind.EndOfFileToken); + sourceFile.endOfFileToken = parseTokenNode(); + sourceFile.externalModuleIndicator = getExternalModuleIndicator(); sourceFile.nodeCount = nodeCount; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 81df5c9c42c..edf052a8876 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -786,6 +786,7 @@ module ts { // Source files are declarations when they are external modules. export interface SourceFile extends Declaration { statements: NodeArray; + endOfFileToken: Node; filename: string; text: string; diff --git a/src/services/services.ts b/src/services/services.ts index 29b7431bb23..44c587974df 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -722,6 +722,9 @@ module ts { public filename: string; public text: string; + public statements: NodeArray; + public endOfFileToken: Node; + // These methods will have their implementation provided by the implementation the // compiler actually exports off of SourceFile. public getLineAndCharacterFromPosition: (position: number) => LineAndCharacter; @@ -743,7 +746,6 @@ module ts { public nodeCount: number; public identifierCount: number; public symbolCount: number; - public statements: NodeArray; public version: string; public isOpen: boolean; public languageVersion: ScriptTarget; diff --git a/tests/baselines/reference/anyAssignableToEveryType.js b/tests/baselines/reference/anyAssignableToEveryType.js index 6c117a5054d..75d847709a5 100644 --- a/tests/baselines/reference/anyAssignableToEveryType.js +++ b/tests/baselines/reference/anyAssignableToEveryType.js @@ -83,3 +83,8 @@ function foo(x, y, z) { y = a; z = a; } +//function foo(x: T, y: U, z: V) { +// x = a; +// y = a; +// z = a; +//} diff --git a/tests/baselines/reference/augmentedTypesClass3.js b/tests/baselines/reference/augmentedTypesClass3.js index dd0da2a1646..b42d9dda356 100644 --- a/tests/baselines/reference/augmentedTypesClass3.js +++ b/tests/baselines/reference/augmentedTypesClass3.js @@ -52,3 +52,4 @@ var c5c = (function () { }; return c5c; })(); +//import c5c = require(''); diff --git a/tests/baselines/reference/augmentedTypesEnum.js b/tests/baselines/reference/augmentedTypesEnum.js index f7a83018cfd..484b0addd58 100644 --- a/tests/baselines/reference/augmentedTypesEnum.js +++ b/tests/baselines/reference/augmentedTypesEnum.js @@ -105,3 +105,6 @@ var e6b; (function (e6b) { e6b.y = 2; })(e6b || (e6b = {})); // should be error +// enum then import, messes with error reporting +//enum e7 { One } +//import e7 = require(''); // should be error diff --git a/tests/baselines/reference/augmentedTypesEnum2.js b/tests/baselines/reference/augmentedTypesEnum2.js index 8ab98a7cb7b..434e508f14c 100644 --- a/tests/baselines/reference/augmentedTypesEnum2.js +++ b/tests/baselines/reference/augmentedTypesEnum2.js @@ -40,3 +40,5 @@ var e2 = (function () { }; return e2; })(); +//enum then enum - covered +//enum then import - covered diff --git a/tests/baselines/reference/augmentedTypesFunction.js b/tests/baselines/reference/augmentedTypesFunction.js index 078854e227c..34567c77e8c 100644 --- a/tests/baselines/reference/augmentedTypesFunction.js +++ b/tests/baselines/reference/augmentedTypesFunction.js @@ -93,3 +93,6 @@ var y5b; })(y5b || (y5b = {})); // should be an error function y5c() { } +// function then import, messes with other errors +//function y6() { } +//import y6 = require(''); diff --git a/tests/baselines/reference/augmentedTypesInterface.js b/tests/baselines/reference/augmentedTypesInterface.js index 709b16d615c..a5039f8b1d0 100644 --- a/tests/baselines/reference/augmentedTypesInterface.js +++ b/tests/baselines/reference/augmentedTypesInterface.js @@ -48,3 +48,4 @@ var i3; i3[i3["One"] = 0] = "One"; })(i3 || (i3 = {})); ; +//import i4 = require(''); // error diff --git a/tests/baselines/reference/augmentedTypesModules.js b/tests/baselines/reference/augmentedTypesModules.js index 0c7967b2227..a9bff3fa74b 100644 --- a/tests/baselines/reference/augmentedTypesModules.js +++ b/tests/baselines/reference/augmentedTypesModules.js @@ -268,3 +268,4 @@ var m6; (function (m6) { m6.y = 2; })(m6 || (m6 = {})); +//import m6 = require(''); diff --git a/tests/baselines/reference/augmentedTypesVar.js b/tests/baselines/reference/augmentedTypesVar.js index 4735d647056..f4404cecb3d 100644 --- a/tests/baselines/reference/augmentedTypesVar.js +++ b/tests/baselines/reference/augmentedTypesVar.js @@ -80,3 +80,6 @@ var x6b; (function (x6b) { x6b.y = 2; })(x6b || (x6b = {})); // error +// var then import, messes with other error reporting +//var x7 = 1; +//import x7 = require(''); diff --git a/tests/baselines/reference/baseIndexSignatureResolution.js b/tests/baselines/reference/baseIndexSignatureResolution.js index 0c1e6c610f3..4c2d63bf2c9 100644 --- a/tests/baselines/reference/baseIndexSignatureResolution.js +++ b/tests/baselines/reference/baseIndexSignatureResolution.js @@ -45,3 +45,37 @@ var Derived = (function (_super) { })(Base); var x = null; var y = x[0]; +/* +// Note - the equivalent for normal interface methods works fine: +interface A { + foo(): Base; +} +interface B extends A { + foo(): TBase; +} +var b: B = null; +var z: Derived = b.foo(); +class Base { private a: string; } +class Derived extends Base { private b: string; } + +// Note - commmenting "extends Foo" prevents the error +interface Foo { + [i: number]: Base; +} +interface FooOf extends Foo { + [i: number]: TBase; +} +var x: FooOf = null; +var y: Derived = x[0]; + +/* +// Note - the equivalent for normal interface methods works fine: +interface A { + foo(): Base; +} +interface B extends A { + foo(): TBase; +} +var b: B = null; +var z: Derived = b.foo(); + diff --git a/tests/baselines/reference/commentEmitAtEndOfFile1.js b/tests/baselines/reference/commentEmitAtEndOfFile1.js new file mode 100644 index 00000000000..1a1f7cb8900 --- /dev/null +++ b/tests/baselines/reference/commentEmitAtEndOfFile1.js @@ -0,0 +1,22 @@ +//// [commentEmitAtEndOfFile1.ts] +// test +var f = '' +// test #2 +module foo { + function bar() { } +} +// test #3 +module empty { +} +// test #4 + +//// [commentEmitAtEndOfFile1.js] +// test +var f = ''; +// test #2 +var foo; +(function (foo) { + function bar() { + } +})(foo || (foo = {})); +// test #4 diff --git a/tests/baselines/reference/commentEmitAtEndOfFile1.types b/tests/baselines/reference/commentEmitAtEndOfFile1.types new file mode 100644 index 00000000000..76b5c868cb6 --- /dev/null +++ b/tests/baselines/reference/commentEmitAtEndOfFile1.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/commentEmitAtEndOfFile1.ts === +// test +var f = '' +>f : string + +// test #2 +module foo { +>foo : typeof foo + + function bar() { } +>bar : () => void +} +// test #3 +module empty { +>empty : unknown +} +// test #4 diff --git a/tests/baselines/reference/commentsAtEndOfFile1.js b/tests/baselines/reference/commentsAtEndOfFile1.js index a0b0fe3731e..2d4dae39e6b 100644 --- a/tests/baselines/reference/commentsAtEndOfFile1.js +++ b/tests/baselines/reference/commentsAtEndOfFile1.js @@ -6,3 +6,4 @@ Input: //// [commentsAtEndOfFile1.js] Input: ; +//Testing two diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js index 890add6bc8a..5a00fd85f3c 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnCallSignature.js @@ -501,3 +501,4 @@ var r8b8 = b8 !== a8; var r8b9 = b9 !== a9; var r8b10 = b10 !== a10; var r8b11 = b11 !== a11; +//var r8b12 = b12 !== a12; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js index aefeb6d87ff..cba4f67933b 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnConstructorSignature.js @@ -427,3 +427,4 @@ var r8b6 = b6 !== a6; var r8b7 = b7 !== a7; var r8b8 = b8 !== a8; var r8b9 = b9 !== a9; +//var r8b10 = b10 !== a10; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js index 1a83da3e663..1f2400f9bea 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedCallSignature.js @@ -316,3 +316,4 @@ var r8b3 = b3 !== a3; var r8b4 = b4 !== a4; var r8b5 = b5 !== a5; var r8b6 = b6 !== a6; +//var r8b7 = b7 !== a7; diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js index 393a2485c47..e80480e1a4e 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnInstantiatedConstructorSignature.js @@ -316,3 +316,4 @@ var r8b3 = b3 !== a3; var r8b4 = b4 !== a4; var r8b5 = b5 !== a5; var r8b6 = b6 !== a6; +//var r8b7 = b7 !== a7; diff --git a/tests/baselines/reference/concatError.js b/tests/baselines/reference/concatError.js index e4ae4afdb65..04c0a16b836 100644 --- a/tests/baselines/reference/concatError.js +++ b/tests/baselines/reference/concatError.js @@ -43,3 +43,48 @@ interface Array { var fa; fa = fa.concat([0]); fa = fa.concat(0); +/* + + + + +declare class C { + public m(p1: C>): C; + //public p: T; +} + +var c: C; +var cc: C>; + +c = c.m(cc); +var n1: number[]; +/* +interface Array { + concat(...items: T[][]): T[]; // Note: This overload needs to be picked for arrays of arrays, even though both are applicable + concat(...items: T[]): T[]; +} +*/ +var fa: number[]; + +fa = fa.concat([0]); +fa = fa.concat(0); + + + + + +/* + + + + +declare class C { + public m(p1: C>): C; + //public p: T; +} + +var c: C; +var cc: C>; + +c = c.m(cc); + diff --git a/tests/baselines/reference/conformanceFunctionOverloads.js b/tests/baselines/reference/conformanceFunctionOverloads.js index 15dec719e40..b245f6a2c91 100644 --- a/tests/baselines/reference/conformanceFunctionOverloads.js +++ b/tests/baselines/reference/conformanceFunctionOverloads.js @@ -25,3 +25,13 @@ //// [conformanceFunctionOverloads.js] // Function overloads do not emit code +// Function overload signature with optional parameter +// Function overload signature with optional parameter +// Function overloads with generic and non-generic overloads +// Function overloads whose only difference is returning different unconstrained generic parameters +// Function overloads whose only difference is returning different constrained generic parameters +// Function overloads that differ only by type parameter constraints +// Function overloads with matching accessibility +// Function overloads with matching export +// Function overloads with more params than implementation signature +// Function overloads where return types are same infinitely recursive type reference diff --git a/tests/baselines/reference/emitCommentsOnlyFile.js b/tests/baselines/reference/emitCommentsOnlyFile.js index 263e9dd2588..d720dc3c191 100644 --- a/tests/baselines/reference/emitCommentsOnlyFile.js +++ b/tests/baselines/reference/emitCommentsOnlyFile.js @@ -29,3 +29,29 @@ //// [emitCommentsOnlyFile.js] +/** +* @name Foo +* @class +*/ +/**#@+ +* @memberOf Foo# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ +/** +* @name Foo2 +* @class +*/ +/**#@+ +* @memberOf Foo2# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ diff --git a/tests/baselines/reference/emitPostComments.js b/tests/baselines/reference/emitPostComments.js index 98d1d59457b..8a5736af00d 100644 --- a/tests/baselines/reference/emitPostComments.js +++ b/tests/baselines/reference/emitPostComments.js @@ -31,3 +31,29 @@ var y = 10; //// [emitPostComments.js] var y = 10; +/** +* @name Foo +* @class +*/ +/**#@+ +* @memberOf Foo# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ +/** +* @name Foo2 +* @class +*/ +/**#@+ +* @memberOf Foo2# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ diff --git a/tests/baselines/reference/emitPreComments.js b/tests/baselines/reference/emitPreComments.js index 5a79a430175..4ca3297fce7 100644 --- a/tests/baselines/reference/emitPreComments.js +++ b/tests/baselines/reference/emitPreComments.js @@ -33,3 +33,29 @@ var y = 10; //// [emitPreComments.js] // This is pre comment var y = 10; +/** +* @name Foo +* @class +*/ +/**#@+ +* @memberOf Foo# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ +/** +* @name Foo2 +* @class +*/ +/**#@+ +* @memberOf Foo2# +* @field +*/ +/** +* @name bar +* @type Object[] +*/ +/**#@-*/ diff --git a/tests/baselines/reference/errorSupression1.js b/tests/baselines/reference/errorSupression1.js index 92330a6c074..059530be452 100644 --- a/tests/baselines/reference/errorSupression1.js +++ b/tests/baselines/reference/errorSupression1.js @@ -20,3 +20,4 @@ var Foo = (function () { var baz = Foo.b; // Foo.b won't bind. baz.concat("y"); +// So we don't want an error on 'concat'. diff --git a/tests/baselines/reference/everyTypeAssignableToAny.js b/tests/baselines/reference/everyTypeAssignableToAny.js index 5ff22ce1962..8730167c3ff 100644 --- a/tests/baselines/reference/everyTypeAssignableToAny.js +++ b/tests/baselines/reference/everyTypeAssignableToAny.js @@ -113,3 +113,8 @@ function foo(x, y, z) { a = y; a = z; } +//function foo(x: T, y: U, z: V) { +// a = x; +// a = y; +// a = z; +//} diff --git a/tests/baselines/reference/functionConstraintSatisfaction.js b/tests/baselines/reference/functionConstraintSatisfaction.js index 452080917db..a16f4d1ed36 100644 --- a/tests/baselines/reference/functionConstraintSatisfaction.js +++ b/tests/baselines/reference/functionConstraintSatisfaction.js @@ -113,3 +113,7 @@ function foo2(x, y) { foo(x); foo(y); } +//function foo2(x: T, y: U) { +// foo(x); +// foo(y); +//} diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js index aa2da602e25..f300e3a8093 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndNumericIndexer.js @@ -57,3 +57,10 @@ function other3(arg) { // BUG 821629 //var u: U = r2[1]; // ok } +//function other3(arg: T) { +// var b: { [x: number]: T }; +// var r2 = foo(b); +// var d = r2[1]; +// // BUG 821629 +// //var u: U = r2[1]; // ok +//} diff --git a/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js b/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js index c810ce01fd4..eee87caf3de 100644 --- a/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js +++ b/tests/baselines/reference/genericCallWithObjectTypeArgsAndStringIndexer.js @@ -58,3 +58,10 @@ function other3(arg) { // BUG 821629 //var u: U = r2['hm']; // ok } +//function other3(arg: T) { +// var b: { [x: string]: T }; +// var r2 = foo(b); +// var d: Date = r2['hm']; // ok +// // BUG 821629 +// //var u: U = r2['hm']; // ok +//} diff --git a/tests/baselines/reference/heterogeneousArrayLiterals.js b/tests/baselines/reference/heterogeneousArrayLiterals.js index 8deb3b4b068..4ac929305c0 100644 --- a/tests/baselines/reference/heterogeneousArrayLiterals.js +++ b/tests/baselines/reference/heterogeneousArrayLiterals.js @@ -241,3 +241,28 @@ function foo4(t, u) { var j = [u, derived]; // Derived[] var k = [t, u]; } +//function foo3(t: T, u: U) { +// var a = [t, t]; // T[] +// var b = [t, null]; // T[] +// var c = [t, u]; // {}[] +// var d = [t, 1]; // {}[] +// var e = [() => t, () => u]; // {}[] +// var f = [() => t, () => u, () => null]; // { (): any }[] +// var g = [t, base]; // Base[] +// var h = [t, derived]; // Derived[] +// var i = [u, base]; // Base[] +// var j = [u, derived]; // Derived[] +//} +//function foo4(t: T, u: U) { +// var a = [t, t]; // T[] +// var b = [t, null]; // T[] +// var c = [t, u]; // BUG 821629 +// var d = [t, 1]; // {}[] +// var e = [() => t, () => u]; // {}[] +// var f = [() => t, () => u, () => null]; // { (): any }[] +// var g = [t, base]; // Base[] +// var h = [t, derived]; // Derived[] +// var i = [u, base]; // Base[] +// var j = [u, derived]; // Derived[] +// var k: Base[] = [t, u]; +//} diff --git a/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js index 81ed990532c..74354468e32 100644 --- a/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne.js @@ -47,3 +47,11 @@ function f2() { var x; x.getDate(); } +//function f2() { +// function g() { +// var x: U; +// x.toFixed(); +// } +// var x: U; +// x.getDate(); +//} diff --git a/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js b/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js index 8a5a9448f18..36a250d365d 100644 --- a/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js +++ b/tests/baselines/reference/innerTypeParameterShadowingOuterOne2.js @@ -66,3 +66,13 @@ var C2 = (function () { }; return C2; })(); +//class C2 { +// g() { +// var x: U; +// x.toFixed(); +// } +// h() { +// var x: U; +// x.getDate(); +// } +//} diff --git a/tests/baselines/reference/moduleIdentifiers.js b/tests/baselines/reference/moduleIdentifiers.js index e2050d98f5d..04d39019482 100644 --- a/tests/baselines/reference/moduleIdentifiers.js +++ b/tests/baselines/reference/moduleIdentifiers.js @@ -18,3 +18,5 @@ var M; //var p: M.P; //var m: M = M; var x1 = M.a; +//var x2 = m.a; +//var q: m.P; diff --git a/tests/baselines/reference/nullAssignableToEveryType.js b/tests/baselines/reference/nullAssignableToEveryType.js index 4901f4837bb..9917ebeac9e 100644 --- a/tests/baselines/reference/nullAssignableToEveryType.js +++ b/tests/baselines/reference/nullAssignableToEveryType.js @@ -80,3 +80,8 @@ function foo(x, y, z) { y = null; z = null; } +//function foo(x: T, y: U, z: V) { +// x = null; +// y = null; +// z = null; +//} diff --git a/tests/baselines/reference/parserS7.6.1.1_A1.10.js b/tests/baselines/reference/parserS7.6.1.1_A1.10.js index 04e0076b16a..6465281d88d 100644 --- a/tests/baselines/reference/parserS7.6.1.1_A1.10.js +++ b/tests/baselines/reference/parserS7.6.1.1_A1.10.js @@ -17,3 +17,11 @@ //// [parserS7.6.1.1_A1.10.js] // Copyright 2009 the Sputnik authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. +/** + * The "for" token can not be used as identifier + * + * @path ch07/7.6/7.6.1/7.6.1.1/S7.6.1.1_A1.10.js + * @description Checking if execution of "for=1" fails + * @negative + */ +//for = 1; diff --git a/tests/baselines/reference/parserSyntaxWalker.generated.js b/tests/baselines/reference/parserSyntaxWalker.generated.js index 3b78baa0f74..392b5545830 100644 --- a/tests/baselines/reference/parserSyntaxWalker.generated.js +++ b/tests/baselines/reference/parserSyntaxWalker.generated.js @@ -289,3 +289,220 @@ // [index: number]: string; // } //} +//import fs = module("fs"); +//module TypeScriptAllInOne { +// export class Program { +// static Main(...args: string[]) { +// try { +// var bfs = new BasicFeatures(); +// var retValue: number = 0; +// retValue = bfs.VARIABLES(); +// if (retValue != 0) { +// return 1; +// } +// retValue = bfs.STATEMENTS(4); +// if (retValue != 0) { +// return 1; +// } +// retValue = bfs.TYPES(); +// if (retValue != 0) { +// return 1; +// } +// retValue = bfs.OPERATOR(); +// if (retValue != 0) { +// return 1; +// } +// } +// catch (e) { +// console.log(e); +// } +// finally { +// } +// console.log('Done'); +// return 0; +// } +// } +// class BasicFeatures { +// /// +// /// Test various of variables. Including nullable,key world as variable,special format +// /// +// /// +// public VARIABLES(): number { +// var local = Number.MAX_VALUE; +// var min = Number.MIN_VALUE; +// var inf = Number.NEGATIVE_INFINITY; +// var nan = Number.NaN; +// var undef = undefined; +// var п = local; +// var м = local; +// var local5 = null; +// var local6 = local5 instanceof fs.File; +// var hex = 0xBADC0DE, Hex = 0XDEADBEEF; +// var float = 6.02e23, float2 = 6.02E-23 +// var char = 'c', \u0066 = '\u0066', hexchar = '\x42'; +// var quoted = '"', quoted2 = "'"; +// var reg = /\w*/; +// var objLit = { "var": number = 42, equals: function (x) { return x["var"] === 42; }, toString: () => 'objLit{42}' }; +// var weekday = Weekdays.Monday; +// var con = char + f + hexchar + float.toString() + float2.toString() + reg.toString() + objLit + weekday; +// // +// var any = 0; +// var boolean = 0; +// var declare = 0; +// var constructor = 0; +// var get = 0; +// var implements = 0; +// var interface = 0; +// var let = 0; +// var module = 0; +// var number = 0; +// var package = 0; +// var private = 0; +// var protected = 0; +// var public = 0; +// var set = 0; +// var static = 0; +// var string = 0; +// var yield = 0; +// var sum3 = any + boolean + declare + constructor + get + implements + interface + let + module + number + package + private + protected + public + set + static + string + yield; +// return 0; +// } +// /// +// /// Test different statements. Including if-else,swith,foreach,(un)checked,lock,using,try-catch-finally +// /// +// /// +// /// +// STATEMENTS(i: number): number { +// var retVal = 0; +// if (i == 1) +// retVal = 1; +// else +// retVal = 0; +// switch (i) { +// case 2: +// retVal = 1; +// break; +// case 3: +// retVal = 1; +// break; +// default: +// break; +// } +// for (var x in { x: 0, y: 1 }) { +// } +// try { +// throw null; +// } +// catch (Exception) { +// } +// finally { +// try { } +// catch (Exception) { } +// } +// return retVal; +// } +// /// +// /// Test types in ts language. Including class,struct,interface,delegate,anonymous type +// /// +// /// +// public TYPES(): number { +// var retVal = 0; +// var c = new CLASS(); +// var xx: IF = c; +// retVal += c.Property; +// retVal += c.Member(); +// retVal += xx ^= Foo() ? 0 : 1; +// //anonymous type +// var anony = { a: new CLASS() }; +// retVal += anony.a.d(); +// return retVal; +// } +// ///// +// ///// Test different operators +// ///// +// ///// +// public OPERATOR(): number { +// var a: number[] = [1, 2, 3, 4, implements , ];/*[] bug*/ // YES [] +// var i = a[1];/*[]*/ +// i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/ +// var b = true && false || true ^ false;/*& | ^*/ +// b = !b;/*!*/ +// i = ~i;/*~i*/ +// b = i < (i - continue ) && (i + 1) > i;/*< && >*/ +// var f = true ? 1 : 0;/*? :*/ // YES : +// i++;/*++*/ +// i--;/*--*/ +// b = true && false || true;/*&& ||*/ +// i = i << 5;/*<<*/ +// i = i >> 5;/*>>*/ +// var j = i; +// b = i == j && i != j && i <= j && i >= j;/*= == && != <= >=*/ +// i += 5.0;/*+=*/ +// i -= i;/*-=*/ +// i *= i;/**=*/ +// if (i == 0) +// i++; +// i /= i;/*/=*/ +// i %= i;/*%=*/ +// i &= i;/*&=*/ +// i |= i;/*|=*/ +// i ^= i;/*^=*/ +// i <<= i;/*<<=*/ +// i >>= i;/*>>=*/ +// if (i == 0 && !b && f == 1) +// return 0; +// else return 1; +// } +// } +// interface IF { +// Foo