Skip to content

Commit a929d8c

Browse files
committed
Merge branch 'master' into travis-node-4
2 parents 7f3bfcf + 53cff21 commit a929d8c

113 files changed

Lines changed: 1744 additions & 965 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.npmignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ doc
33
scripts
44
src
55
tests
6+
internal
7+
tslint.json
68
Jakefile.js
7-
.travis.yml
9+
.editorconfig
10+
.gitattributes
811
.settings/
12+
.travis.yml
913
.vscode/

Jakefile.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -628,10 +628,9 @@ function deleteTemporaryProjectOutput() {
628628

629629
var testTimeout = 20000;
630630
desc("Runs the tests using the built run.js file. Syntax is jake runtests. Optional parameters 'host=', 'tests=[regex], reporter=[list|spec|json|<more>]', debug=true.");
631-
task("runtests", ["tests", builtLocalDirectory], function() {
631+
task("runtests", ["build-rules", "tests", builtLocalDirectory], function() {
632632
cleanTestDirs();
633633
var debug = process.env.debug || process.env.d;
634-
host = "mocha"
635634
tests = process.env.test || process.env.tests || process.env.t;
636635
var light = process.env.light || false;
637636
var testConfigFile = 'test.config';
@@ -653,9 +652,16 @@ task("runtests", ["tests", builtLocalDirectory], function() {
653652
reporter = process.env.reporter || process.env.r || 'mocha-fivemat-progress-reporter';
654653
// timeout normally isn't necessary but Travis-CI has been timing out on compiler baselines occasionally
655654
// default timeout is 2sec which really should be enough, but maybe we just need a small amount longer
656-
var cmd = host + (debug ? " --debug-brk" : "") + " -R " + reporter + tests + colors + ' -t ' + testTimeout + ' ' + run;
655+
var cmd = "mocha" + (debug ? " --debug-brk" : "") + " -R " + reporter + tests + colors + ' -t ' + testTimeout + ' ' + run;
657656
console.log(cmd);
658-
exec(cmd, deleteTemporaryProjectOutput);
657+
exec(cmd, function() {
658+
deleteTemporaryProjectOutput();
659+
var lint = jake.Task['lint'];
660+
lint.addListener('complete', function () {
661+
complete();
662+
});
663+
lint.invoke();
664+
});
659665
}, {async: true});
660666

661667
desc("Generates code coverage data via instanbul");
@@ -813,7 +819,6 @@ task("update-sublime", ["local", serverFile], function() {
813819
var tslintRuleDir = "scripts/tslint";
814820
var tslintRules = ([
815821
"nextLineRule",
816-
"noInferrableTypesRule",
817822
"noNullRule",
818823
"booleanTriviaRule"
819824
]);
@@ -826,7 +831,7 @@ var tslintRulesOutFiles = tslintRules.map(function(p) {
826831
desc("Compiles tslint rules to js");
827832
task("build-rules", tslintRulesOutFiles);
828833
tslintRulesFiles.forEach(function(ruleFile, i) {
829-
compileFile(tslintRulesOutFiles[i], [ruleFile], [ruleFile], [], /*useBuiltCompiler*/ true, /*noOutFile*/ true, /*generateDeclarations*/ false, path.join(builtLocalDirectory, "tslint"));
834+
compileFile(tslintRulesOutFiles[i], [ruleFile], [ruleFile], [], /*useBuiltCompiler*/ false, /*noOutFile*/ true, /*generateDeclarations*/ false, path.join(builtLocalDirectory, "tslint"));
830835
});
831836

832837
function getLinterOptions() {
@@ -860,8 +865,6 @@ function lintFileAsync(options, path, cb) {
860865

861866
var lintTargets = compilerSources.concat(harnessCoreSources);
862867

863-
// if the codebase were free of linter errors we could make jake runtests
864-
// run this task automatically
865868
desc("Runs tslint on the compiler sources");
866869
task("lint", ["build-rules"], function() {
867870
var lintOptions = getLinterOptions();

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
},
4141
"scripts": {
4242
"pretest": "jake tests",
43-
"test": "jake runtests && npm run lint",
43+
"test": "jake runtests",
4444
"build": "npm run build:compiler && npm run build:tests",
4545
"build:compiler": "jake local",
4646
"build:tests": "jake tests",

scripts/tslint/noInferrableTypesRule.ts

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/compiler/checker.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3171,8 +3171,8 @@ namespace ts {
31713171
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
31723172
callSignatures = instantiateList(source.declaredCallSignatures, mapper, instantiateSignature);
31733173
constructSignatures = instantiateList(source.declaredConstructSignatures, mapper, instantiateSignature);
3174-
stringIndexType = source.declaredStringIndexType ? instantiateType(source.declaredStringIndexType, mapper) : undefined;
3175-
numberIndexType = source.declaredNumberIndexType ? instantiateType(source.declaredNumberIndexType, mapper) : undefined;
3174+
stringIndexType = instantiateType(source.declaredStringIndexType, mapper);
3175+
numberIndexType = instantiateType(source.declaredNumberIndexType, mapper);
31763176
}
31773177
let baseTypes = getBaseTypes(source);
31783178
if (baseTypes.length) {
@@ -3371,15 +3371,22 @@ namespace ts {
33713371
setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
33723372
}
33733373

3374-
function resolveAnonymousTypeMembers(type: ObjectType) {
3374+
function resolveAnonymousTypeMembers(type: AnonymousType) {
33753375
let symbol = type.symbol;
33763376
let members: SymbolTable;
33773377
let callSignatures: Signature[];
33783378
let constructSignatures: Signature[];
33793379
let stringIndexType: Type;
33803380
let numberIndexType: Type;
33813381

3382-
if (symbol.flags & SymbolFlags.TypeLiteral) {
3382+
if (type.target) {
3383+
members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
3384+
callSignatures = instantiateList(getSignaturesOfType(type.target, SignatureKind.Call), type.mapper, instantiateSignature);
3385+
constructSignatures = instantiateList(getSignaturesOfType(type.target, SignatureKind.Construct), type.mapper, instantiateSignature);
3386+
stringIndexType = instantiateType(getIndexTypeOfType(type.target, IndexKind.String), type.mapper);
3387+
numberIndexType = instantiateType(getIndexTypeOfType(type.target, IndexKind.Number), type.mapper);
3388+
}
3389+
else if (symbol.flags & SymbolFlags.TypeLiteral) {
33833390
members = symbol.members;
33843391
callSignatures = getSignaturesOfSymbol(members["__call"]);
33853392
constructSignatures = getSignaturesOfSymbol(members["__new"]);
@@ -3424,7 +3431,7 @@ namespace ts {
34243431
resolveClassOrInterfaceMembers(<InterfaceType>type);
34253432
}
34263433
else if (type.flags & TypeFlags.Anonymous) {
3427-
resolveAnonymousTypeMembers(<ObjectType>type);
3434+
resolveAnonymousTypeMembers(<AnonymousType>type);
34283435
}
34293436
else if (type.flags & TypeFlags.Tuple) {
34303437
resolveTupleTypeMembers(<TupleType>type);
@@ -4543,7 +4550,7 @@ namespace ts {
45434550
}
45444551
let result = createSignature(signature.declaration, freshTypeParameters,
45454552
instantiateList(signature.parameters, mapper, instantiateSymbol),
4546-
signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined,
4553+
instantiateType(signature.resolvedReturnType, mapper),
45474554
freshTypePredicate,
45484555
signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals);
45494556
result.target = signature;
@@ -4575,7 +4582,7 @@ namespace ts {
45754582
return result;
45764583
}
45774584

4578-
function instantiateAnonymousType(type: ObjectType, mapper: TypeMapper): ObjectType {
4585+
function instantiateAnonymousType(type: AnonymousType, mapper: TypeMapper): ObjectType {
45794586
if (mapper.instantiations) {
45804587
let cachedType = mapper.instantiations[type.id];
45814588
if (cachedType) {
@@ -4586,27 +4593,21 @@ namespace ts {
45864593
mapper.instantiations = [];
45874594
}
45884595
// Mark the anonymous type as instantiated such that our infinite instantiation detection logic can recognize it
4589-
let result = <ResolvedType>createObjectType(TypeFlags.Anonymous | TypeFlags.Instantiated, type.symbol);
4590-
result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol);
4591-
result.members = createSymbolTable(result.properties);
4592-
result.callSignatures = instantiateList(getSignaturesOfType(type, SignatureKind.Call), mapper, instantiateSignature);
4593-
result.constructSignatures = instantiateList(getSignaturesOfType(type, SignatureKind.Construct), mapper, instantiateSignature);
4594-
let stringIndexType = getIndexTypeOfType(type, IndexKind.String);
4595-
let numberIndexType = getIndexTypeOfType(type, IndexKind.Number);
4596-
if (stringIndexType) result.stringIndexType = instantiateType(stringIndexType, mapper);
4597-
if (numberIndexType) result.numberIndexType = instantiateType(numberIndexType, mapper);
4596+
let result = <AnonymousType>createObjectType(TypeFlags.Anonymous | TypeFlags.Instantiated, type.symbol);
4597+
result.target = type;
4598+
result.mapper = mapper;
45984599
mapper.instantiations[type.id] = result;
45994600
return result;
46004601
}
46014602

46024603
function instantiateType(type: Type, mapper: TypeMapper): Type {
4603-
if (mapper !== identityMapper) {
4604+
if (type && mapper !== identityMapper) {
46044605
if (type.flags & TypeFlags.TypeParameter) {
46054606
return mapper(<TypeParameter>type);
46064607
}
46074608
if (type.flags & TypeFlags.Anonymous) {
46084609
return type.symbol && type.symbol.flags & (SymbolFlags.Function | SymbolFlags.Method | SymbolFlags.Class | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral) ?
4609-
instantiateAnonymousType(<ObjectType>type, mapper) : type;
4610+
instantiateAnonymousType(<AnonymousType>type, mapper) : type;
46104611
}
46114612
if (type.flags & TypeFlags.Reference) {
46124613
return createTypeReference((<TypeReference>type).target, instantiateList((<TypeReference>type).typeArguments, mapper, instantiateType));
@@ -7631,7 +7632,9 @@ namespace ts {
76317632
// Look up the value in the current scope
76327633
if (valueSymbol && valueSymbol !== unknownSymbol) {
76337634
links.jsxFlags |= JsxFlags.ClassElement;
7634-
getSymbolLinks(valueSymbol).referenced = true;
7635+
if (valueSymbol.flags & SymbolFlags.Alias) {
7636+
markAliasSymbolAsReferenced(valueSymbol);
7637+
}
76357638
}
76367639

76377640
return valueSymbol || unknownSymbol;
@@ -8564,6 +8567,12 @@ namespace ts {
85648567
case SyntaxKind.SetAccessor:
85658568
// A method or accessor declaration decorator will have two or three arguments (see
85668569
// `PropertyDecorator` and `MethodDecorator` in core.d.ts)
8570+
8571+
// If we are emitting decorators for ES3, we will only pass two arguments.
8572+
if (languageVersion === ScriptTarget.ES3) {
8573+
return 2;
8574+
}
8575+
85678576
// If the method decorator signature only accepts a target and a key, we will only
85688577
// type check those arguments.
85698578
return signature.parameters.length >= 3 ? 3 : 2;
@@ -14917,9 +14926,6 @@ namespace ts {
1491714926
if (!nodeCanBeDecorated(node)) {
1491814927
return grammarErrorOnFirstToken(node, Diagnostics.Decorators_are_not_valid_here);
1491914928
}
14920-
else if (languageVersion < ScriptTarget.ES5) {
14921-
return grammarErrorOnFirstToken(node, Diagnostics.Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher);
14922-
}
1492314929
else if (node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor) {
1492414930
let accessors = getAllAccessorDeclarations((<ClassDeclaration>node.parent).members, <AccessorDeclaration>node);
1492514931
if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {

src/compiler/diagnosticMessages.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -631,10 +631,6 @@
631631
"category": "Error",
632632
"code": 1204
633633
},
634-
"Decorators are only available when targeting ECMAScript 5 and higher.": {
635-
"category": "Error",
636-
"code": 1205
637-
},
638634
"Decorators are not valid here.": {
639635
"category": "Error",
640636
"code": 1206

0 commit comments

Comments
 (0)