Skip to content

Commit b1e688c

Browse files
author
zhengbli
committed
Merge branch 'master' of https://github.com/Microsoft/TypeScript into errorlist
1 parent efef7b3 commit b1e688c

162 files changed

Lines changed: 4015 additions & 1738 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.

Jakefile.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ var languageServiceLibrarySources = [
113113
return path.join(serverDirectory, f);
114114
}).concat(servicesSources);
115115

116-
var harnessSources = [
116+
var harnessCoreSources = [
117117
"harness.ts",
118118
"sourceMapRecorder.ts",
119119
"harnessLanguageService.ts",
@@ -129,7 +129,9 @@ var harnessSources = [
129129
"runner.ts"
130130
].map(function (f) {
131131
return path.join(harnessDirectory, f);
132-
}).concat([
132+
});
133+
134+
var harnessSources = harnessCoreSources.concat([
133135
"incrementalParser.ts",
134136
"jsDocParsing.ts",
135137
"services/colorization.ts",
@@ -566,7 +568,7 @@ task("runtests", ["tests", builtLocalDirectory], function() {
566568
colors = process.env.colors || process.env.color
567569
colors = colors ? ' --no-colors ' : ' --colors ';
568570
tests = tests ? ' -g ' + tests : '';
569-
reporter = process.env.reporter || process.env.r || 'dot';
571+
reporter = process.env.reporter || process.env.r || 'mocha-fivemat-progress-reporter';
570572
// timeout normally isn't necessary but Travis-CI has been timing out on compiler baselines occasionally
571573
// default timeout is 2sec which really should be enough, but maybe we just need a small amount longer
572574
var cmd = host + " -R " + reporter + tests + colors + ' -t ' + testTimeout + ' ' + run;
@@ -730,12 +732,13 @@ task("update-sublime", ["local", serverFile], function() {
730732
// run this task automatically
731733
desc("Runs tslint on the compiler sources");
732734
task("lint", [], function() {
733-
for(var i in compilerSources) {
734-
var f = compilerSources[i];
735+
function success(f) { return function() { console.log('SUCCESS: No linter errors in ' + f + '\n'); }};
736+
function failure(f) { return function() { console.log('FAILURE: Please fix linting errors in ' + f + '\n') }};
737+
738+
var lintTargets = compilerSources.concat(harnessCoreSources);
739+
for(var i in lintTargets) {
740+
var f = lintTargets[i];
735741
var cmd = 'tslint -f ' + f;
736-
exec(cmd,
737-
function() { console.log('SUCCESS: No linter errors'); },
738-
function() { console.log('FAILURE: Please fix linting errors in ' + f + '\n');
739-
});
742+
exec(cmd, success(f), failure(f));
740743
}
741744
}, { async: true });

bin/tsc.js

Lines changed: 83 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,14 @@ var ts;
933933
newLine: _os.EOL,
934934
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
935935
write: function (s) {
936-
_fs.writeSync(1, s);
936+
var buffer = new Buffer(s, 'utf8');
937+
var offset = 0;
938+
var toWrite = buffer.length;
939+
var written = 0;
940+
while ((written = _fs.writeSync(1, buffer, offset, toWrite)) < toWrite) {
941+
offset += written;
942+
toWrite -= written;
943+
}
937944
},
938945
readFile: readFile,
939946
writeFile: writeFile,
@@ -1401,7 +1408,7 @@ var ts;
14011408
Classes_containing_abstract_methods_must_be_marked_abstract: { code: 2514, category: ts.DiagnosticCategory.Error, key: "Classes containing abstract methods must be marked abstract." },
14021409
Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: { code: 2515, category: ts.DiagnosticCategory.Error, key: "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'." },
14031410
All_declarations_of_an_abstract_method_must_be_consecutive: { code: 2516, category: ts.DiagnosticCategory.Error, key: "All declarations of an abstract method must be consecutive." },
1404-
Constructor_objects_of_abstract_type_cannot_be_assigned_to_constructor_objects_of_non_abstract_type: { code: 2517, category: ts.DiagnosticCategory.Error, key: "Constructor objects of abstract type cannot be assigned to constructor objects of non-abstract type" },
1411+
Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: { code: 2517, category: ts.DiagnosticCategory.Error, key: "Cannot assign an abstract constructor type to a non-abstract constructor type." },
14051412
Only_an_ambient_class_can_be_merged_with_an_interface: { code: 2518, category: ts.DiagnosticCategory.Error, key: "Only an ambient class can be merged with an interface." },
14061413
Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: { code: 2520, category: ts.DiagnosticCategory.Error, key: "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions." },
14071414
Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: { code: 2521, category: ts.DiagnosticCategory.Error, key: "Expression resolves to variable declaration '{0}' that compiler uses to support async functions." },
@@ -9187,7 +9194,8 @@ var ts;
91879194
}
91889195
else {
91899196
node.exportClause = parseNamedImportsOrExports(226);
9190-
if (parseOptional(130)) {
9197+
if (token === 130 || (token === 8 && !scanner.hasPrecedingLineBreak())) {
9198+
parseExpected(130);
91919199
node.moduleSpecifier = parseModuleSpecifier();
91929200
}
91939201
}
@@ -13263,7 +13271,7 @@ var ts;
1326313271
var id = getTypeListId(elementTypes);
1326413272
var type = tupleTypes[id];
1326513273
if (!type) {
13266-
type = tupleTypes[id] = createObjectType(8192);
13274+
type = tupleTypes[id] = createObjectType(8192 | getWideningFlagsOfTypes(elementTypes));
1326713275
type.elementTypes = elementTypes;
1326813276
}
1326913277
return type;
@@ -14084,10 +14092,29 @@ var ts;
1408414092
var targetSignatures = getSignaturesOfType(target, kind);
1408514093
var result = -1;
1408614094
var saveErrorInfo = errorInfo;
14095+
var sourceSig = sourceSignatures[0];
14096+
var targetSig = targetSignatures[0];
14097+
if (sourceSig && targetSig) {
14098+
var sourceErasedSignature = getErasedSignature(sourceSig);
14099+
var targetErasedSignature = getErasedSignature(targetSig);
14100+
var sourceReturnType = sourceErasedSignature && getReturnTypeOfSignature(sourceErasedSignature);
14101+
var targetReturnType = targetErasedSignature && getReturnTypeOfSignature(targetErasedSignature);
14102+
var sourceReturnDecl = sourceReturnType && sourceReturnType.symbol && ts.getDeclarationOfKind(sourceReturnType.symbol, 211);
14103+
var targetReturnDecl = targetReturnType && targetReturnType.symbol && ts.getDeclarationOfKind(targetReturnType.symbol, 211);
14104+
var sourceIsAbstract = sourceReturnDecl && sourceReturnDecl.flags & 256;
14105+
var targetIsAbstract = targetReturnDecl && targetReturnDecl.flags & 256;
14106+
if (sourceIsAbstract && !targetIsAbstract) {
14107+
if (reportErrors) {
14108+
reportError(ts.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type);
14109+
}
14110+
return 0;
14111+
}
14112+
}
1408714113
outer: for (var _i = 0; _i < targetSignatures.length; _i++) {
1408814114
var t = targetSignatures[_i];
1408914115
if (!t.hasStringLiterals || target.flags & 262144) {
1409014116
var localErrors = reportErrors;
14117+
var checkedAbstractAssignability = false;
1409114118
for (var _a = 0; _a < sourceSignatures.length; _a++) {
1409214119
var s = sourceSignatures[_a];
1409314120
if (!s.hasStringLiterals || source.flags & 262144) {
@@ -14135,12 +14162,12 @@ var ts;
1413514162
target = getErasedSignature(target);
1413614163
var result = -1;
1413714164
for (var i = 0; i < checkCount; i++) {
14138-
var s_1 = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
14139-
var t_1 = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
14165+
var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
14166+
var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
1414014167
var saveErrorInfo = errorInfo;
14141-
var related = isRelatedTo(s_1, t_1, reportErrors);
14168+
var related = isRelatedTo(s, t, reportErrors);
1414214169
if (!related) {
14143-
related = isRelatedTo(t_1, s_1, false);
14170+
related = isRelatedTo(t, s, false);
1414414171
if (!related) {
1414514172
if (reportErrors) {
1414614173
reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name);
@@ -14178,11 +14205,11 @@ var ts;
1417814205
}
1417914206
return 0;
1418014207
}
14181-
var t = getReturnTypeOfSignature(target);
14182-
if (t === voidType)
14208+
var targetReturnType = getReturnTypeOfSignature(target);
14209+
if (targetReturnType === voidType)
1418314210
return result;
14184-
var s = getReturnTypeOfSignature(source);
14185-
return result & isRelatedTo(s, t, reportErrors);
14211+
var sourceReturnType = getReturnTypeOfSignature(source);
14212+
return result & isRelatedTo(sourceReturnType, targetReturnType, reportErrors);
1418614213
}
1418714214
function signaturesIdenticalTo(source, target, kind) {
1418814215
var sourceSignatures = getSignaturesOfType(source, kind);
@@ -14395,7 +14422,7 @@ var ts;
1439514422
return !!getPropertyOfType(type, "0");
1439614423
}
1439714424
function isTupleType(type) {
14398-
return (type.flags & 8192) && !!type.elementTypes;
14425+
return !!(type.flags & 8192);
1439914426
}
1440014427
function getWidenedTypeOfObjectLiteral(type) {
1440114428
var properties = getPropertiesOfObjectType(type);
@@ -14437,36 +14464,46 @@ var ts;
1443714464
if (isArrayType(type)) {
1443814465
return createArrayType(getWidenedType(type.typeArguments[0]));
1443914466
}
14467+
if (isTupleType(type)) {
14468+
return createTupleType(ts.map(type.elementTypes, getWidenedType));
14469+
}
1444014470
}
1444114471
return type;
1444214472
}
1444314473
function reportWideningErrorsInType(type) {
14474+
var errorReported = false;
1444414475
if (type.flags & 16384) {
14445-
var errorReported = false;
14446-
ts.forEach(type.types, function (t) {
14476+
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
14477+
var t = _a[_i];
1444714478
if (reportWideningErrorsInType(t)) {
1444814479
errorReported = true;
1444914480
}
14450-
});
14451-
return errorReported;
14481+
}
1445214482
}
1445314483
if (isArrayType(type)) {
1445414484
return reportWideningErrorsInType(type.typeArguments[0]);
1445514485
}
14486+
if (isTupleType(type)) {
14487+
for (var _b = 0, _c = type.elementTypes; _b < _c.length; _b++) {
14488+
var t = _c[_b];
14489+
if (reportWideningErrorsInType(t)) {
14490+
errorReported = true;
14491+
}
14492+
}
14493+
}
1445614494
if (type.flags & 524288) {
14457-
var errorReported = false;
14458-
ts.forEach(getPropertiesOfObjectType(type), function (p) {
14495+
for (var _d = 0, _e = getPropertiesOfObjectType(type); _d < _e.length; _d++) {
14496+
var p = _e[_d];
1445914497
var t = getTypeOfSymbol(p);
1446014498
if (t.flags & 1048576) {
1446114499
if (!reportWideningErrorsInType(t)) {
1446214500
error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(getWidenedType(t)));
1446314501
}
1446414502
errorReported = true;
1446514503
}
14466-
});
14467-
return errorReported;
14504+
}
1446814505
}
14469-
return false;
14506+
return errorReported;
1447014507
}
1447114508
function reportImplicitAnyError(declaration, type) {
1447214509
var typeAsString = typeToString(getWidenedType(type));
@@ -14614,28 +14651,31 @@ var ts;
1461414651
inferFromTypes(sourceType, target);
1461514652
}
1461614653
}
14617-
else if (source.flags & 80896 && (target.flags & (4096 | 8192) ||
14618-
(target.flags & 65536) && target.symbol && target.symbol.flags & (8192 | 2048 | 32))) {
14619-
if (isInProcess(source, target)) {
14620-
return;
14621-
}
14622-
if (isDeeplyNestedGeneric(source, sourceStack, depth) && isDeeplyNestedGeneric(target, targetStack, depth)) {
14623-
return;
14654+
else {
14655+
source = getApparentType(source);
14656+
if (source.flags & 80896 && (target.flags & (4096 | 8192) ||
14657+
(target.flags & 65536) && target.symbol && target.symbol.flags & (8192 | 2048 | 32))) {
14658+
if (isInProcess(source, target)) {
14659+
return;
14660+
}
14661+
if (isDeeplyNestedGeneric(source, sourceStack, depth) && isDeeplyNestedGeneric(target, targetStack, depth)) {
14662+
return;
14663+
}
14664+
if (depth === 0) {
14665+
sourceStack = [];
14666+
targetStack = [];
14667+
}
14668+
sourceStack[depth] = source;
14669+
targetStack[depth] = target;
14670+
depth++;
14671+
inferFromProperties(source, target);
14672+
inferFromSignatures(source, target, 0);
14673+
inferFromSignatures(source, target, 1);
14674+
inferFromIndexTypes(source, target, 0, 0);
14675+
inferFromIndexTypes(source, target, 1, 1);
14676+
inferFromIndexTypes(source, target, 0, 1);
14677+
depth--;
1462414678
}
14625-
if (depth === 0) {
14626-
sourceStack = [];
14627-
targetStack = [];
14628-
}
14629-
sourceStack[depth] = source;
14630-
targetStack[depth] = target;
14631-
depth++;
14632-
inferFromProperties(source, target);
14633-
inferFromSignatures(source, target, 0);
14634-
inferFromSignatures(source, target, 1);
14635-
inferFromIndexTypes(source, target, 0, 0);
14636-
inferFromIndexTypes(source, target, 1, 1);
14637-
inferFromIndexTypes(source, target, 0, 1);
14638-
depth--;
1463914679
}
1464014680
}
1464114681
function inferFromProperties(source, target) {

0 commit comments

Comments
 (0)